Tebak nomornya

10

Deskripsi

Buat game "Tebak angka" yang berfungsi penuh. Game ini dimainkan oleh dua pemain sebagai berikut:

  1. pemain satu memilih nomor (A) antara 1 dan N
  2. pemain dua mencoba menebak A memilih nomor (B) dalam rentang yang sama
  3. pemain pertama merespons "lebih tinggi" if A > B , "lebih rendah" if A < B atau "benar" if A = B .
  4. langkah 2-3 diulang I kali atau sampai "benar" direspon.
  5. Jika "benar" terdengar, pemain dua menang kalau tidak dia kalah.

Spesifikasi

Spesifikasi minimum untuk entri yang valid:

  • pengguna dapat bermain sebagai pemain satu atau dua pemain.
  • komputer memainkan peran lainnya.
  • komputer harus benar-benar mencoba menebak angka saat bermain sebagai pemain dua (jadi, menebak data yang diberikan atau mengabaikan data yang diberikan itu curang)
  • N = 100 atau input oleh pengguna (pilihan Anda)
  • I = 5 atau input oleh pengguna (pilihan Anda)
  • Program harus mengumumkan pemenang pada akhirnya.
  • petunjuk lengkap yang dapat dibaca manusia tentang apa yang harus dilakukan di setiap langkah (mis. "Bermain sebagai pemain satu atau dua pemain?" , "Masukkan tebakan lain:" , dll.) - jangan mengacaukan yang satu ini; tetap sederhana.

Kondisi menang

Dalam urutan itu:

  1. Entri dengan suara terbanyak menang jika setidaknya 3 suara di depan dari entri dengan suara tertinggi kedua.
  2. Entri terpendek menang.
Eelvex
sumber
Saya tidak membaca dengan jelas bahwa kami membutuhkan AI untuk itu. Bisakah Anda mengonfirmasi bahwa kedua pemain adalah manusia?
JB
@ JK: maaf soal itu: / Anda memang butuh AI. Saya memperbarui pertanyaan sekarang ...
Eelvex
2
Saya pikir teks instruksi untuk setiap langkah harus diberikan, jika tidak sulit untuk membandingkan jawabannya.
Joey
@ Joey Definitely
Šimon Tóth
Apakah validasi input pengguna penting?
zzzzBov

Jawaban:

3

Windows PowerShell, 289

nal ^ Read-Host
filter p{"Player $_ wins.";exit}
$p=1-(^ Player 1 or 2)
$n=($x=1)..($y=99)|random
if($p){$n=^ Enter number}1..5|%{if($p){'{0:"higher";"lower";"correct";2|p}'-f($n-(^ Guess))|iex}else{"Guessing, "+($g=$x..$y|random);@{104='$x=$g+1';108='$y=$g-1';99='2|p'}[+(^)[0]]|iex}}
1|p

Sejarah:

  • 2011-02-21 18:44 (620) Tidak Disatukan.
  • 2011-02-21 19:15 (365) Babak pertama golf.
  • 2011-02-21 19:31 (359) Beberapa inlining.
  • 2011-02-21 19:38 (340) Beberapa string dipersingkat.
  • 2011-02-21 19:44 (339) whilefor
  • 2011-02-21 19:53 (331) Beberapa string duplikat ditarik ke dalam variabel.
  • 2011-02-21 19:53 (330) Variabel lain diuraikan.
  • 2011-02-21 19:53 (328) Kondisi loop yang dioptimalkan. Tapi tidak bisa menggunakan pipa.
  • 2011-02-22 01:57 (326) else{if...}elseif- menyimpan kawat gigi.
  • 2011-02-22 12:42 (325) Memindahkan banyak hal di sekitar, menggunakan hashtabel alih-alih switchuntuk menghindari penamaan loop. Sekarang saya bisa menggunakan adil breakdan pipa juga. Pengumuman pemenang pindah ke filter yang menggunakan exitsehingga tidak perlu istirahat, selamanya.
  • 2011-02-23 01:23 (308) Alih-alih elseifrantai untuk memeriksa tebakan saya hanya menggunakan string format dengan nilai yang berbeda untuk nilai negatif, positif dan nol. Menghemat banyak.
  • 2011-02-23 02:16 (306) Menggunakan pengurangan bukan kesetaraan.
  • 2011-03-12 02:27 (289) Dikurangi ke tingkat yang sama dari interaksi pengguna yang belum sempurna dengan solusi Ruby. Tentu saja lebih pendek dari itu.
Joey
sumber
9

TRS-80 BASIC, 249 karakter

Saya pikir ini mungkin pertama kalinya saya mengirimkan jawaban ke situs ini yang saya tulis sebelum situs itu ada.

0 CLS:RANDOM:A=1:B=1E3:Q=RND(1E3):FORX=1TO8E9:PRINTA"-"B:INPUT"
 Guess";C:IFC<AORC>B,X=X-1:NEXTELSEIFC<QPRINT"Too low":A=C+1:NEXTELSEIFC>QPRINT"Too high":B=C-1:NEXTELSEPRINTC"is right!!
 It took you"X"tries.
":X=9E9:NEXT:FORX=0TO0:X=INKEY$="":NEXT:RUN

Bahkan, saya menulisnya sebelum web di seluruh dunia ada. Kembali pada 1980-an, seperti halnya TRS-80 menjadi tidak relevan.

Ini adalah contoh "one-liner" - upaya untuk menyesuaikan program paling menarik yang Anda bisa ke dalam satu baris BASIC. Itu adalah one-liner pertama saya, dan tidak terlalu mengesankan. (Ada beberapa garis menakjubkan yang beredar di sana.)

Garis TRS-80 BASIC terbatas hingga 255 karakter, minus beberapa untuk overhead. Meskipun Anda kadang-kadang bisa melebihi ini, karena batas sebenarnya adalah 255 byte setelah tokenization - tetapi editor juga akan memotong garis yang memiliki lebih dari 255 karakter sebelum tokenization, dan Anda perlu menggunakan trik dalam editor baris untuk memasukkan karakter kontrol literal seperti baris baru ke string Anda.

Dan ya, untuk memperjelas, garis-garis tersebut dalam daftar adalah karakter baris baru literal. (Untuk mendapatkannya dalam kode Anda, Anda perlu menggunakan Cperintah hange saat EDITmengambil baris. Benar-benar menyakitkan, tetapi layak untuk mengganti delapan atau lebih karakter +CHR$(13)dengan satu.)

Sial, saya sudah lama bermain golf.

kotak roti
sumber
6

C 397 Karakter

N,H=99,L=0,c=0,w=1;main(){char s[9];puts("Play as player 1 or 2: ");scanf("%d",&N);if(N-1){getchar();do{N=rand()%(H-L)+L+1;printf("My guess: %d\n",N);gets(s);if(*s=='c'){w=2;break;}if(*s-'l')H=N-1;else L=N-1;c++;}while(c<5);}else{N=rand()%99+1;while(c<5){puts("Enter guess: ");scanf("%d",&H);if(H==N){puts("correct");break;}else puts(H>N?"higher":"lower");c++;}if(c==5)w=2;}printf("Winner %d",w);}

Dalam bentuk yang lebih mudah dibaca.

main()
{
        int i,N,H=100,L=0,c=0,w=1;
        char s[10];
        puts("Play as player 1 or 2: ");
        scanf("%d",&i);
        if(i-1)
        {
                getchar();
                do{
                        N=rand()%(H-L)+L+1;
                        printf("My guess: %d\n",N);
                        gets(s);
                        if(s[0]=='c')break;
                        else if(s[0]=='h')H=N-1;
                        else L=N-1;
                        c++;
                }while (c<5);
                if(c<5)w=2;
        }
        else
        {
                N=rand()%99+1;
                while (c<5)
                {
                        puts("Enter another guess: ");
                        scanf("%d",&H);
                        if(H==N){printf("correct\n");break;}
                        else if(H>N)printf("higher\n");
                        else printf("lower\n");
                        c++;
                }
                if(c==5)w=2;
        }
        printf("Winner %d",w);
}
fR0DDY
sumber
@ Joey Dikoreksi Sekarang.
fR0DDY
baik, saya tidak tahu lengkap C. Tapi bisakah Anda tolong jelaskan bagaimana program dengan variabel tanpa kompilasi jenis specifier?
MAKZ
Variabel apa pun tanpa tipe yang ditentukan adalah bilangan bulat
Ethiraric
4

C #:

Hitungan karakter: Dengan spasi: 575 Tanpa spasi: 464

    static void Main()
    {
        Action<object> w = s => Console.WriteLine(s);
        Func<object, byte> r = t => { w(t); var s = Console.ReadLine(); return Convert.ToByte(s); };
        var p = r("Player (1/2):");
        int N = 100, g, i = 0, c, d;
        var q = new List<int>(Enumerable.Range(0, N));
        Func<Guid> x = Guid.NewGuid;
        c = p == 1 ? r("Number:") : q.OrderBy(j => x()).First();
        m: i++;
        g = p == 2 ? r("Guess:") : q.OrderBy(j => x()).First();
        d = g < c ? -1 : (g > c ? 1 : 0);
        w(d == -1 ? "Higher" : (d == 1 ? "Lower" : "correct"));
        q = q.Where(n => d == -1 ? n > g : n < g).ToList();
        if(c != g && i < 5) goto m;
        r(g);
    }

Edit do while sekarang "Goto" ( menggigil )

Yngve B-Nilsen
sumber
3

Dataran tua yang bagus C

#include <stdio.h>
#define x(s) puts(s)
main(){int c,i,l,h,g;srand(time(NULL));p:x("You want to guess (1) or should I (2)?");scanf("%d",&c);i=5;if(c==2){x("Think a number 1..100");h=100;l=1;goto t;}if(c==1){x("Guess a number 1..100");h=rand()%100+1;goto g;}return 0;t:if(!i--)goto u;printf("%d (1)higher (2)lower (3)correct",g=rand()%(h-l)+l);scanf("%d",&c);if(c==1)l=g;if(c==2)h=g;if(c==3)goto c;goto t;g:if (!i--)goto c;scanf("%d",&g);if(g>h)x("lower");if(g<h)x("higher");if(g==h){x("correct");goto u;}goto g;u:x("You win");goto p;c:x("I win");goto p;}
  • 23/11/2011 16:44:00 883 bagus dan nyaman
  • 24/11/2011 09:38:00 616 diperbaiki & disingkat
  • 24/11/2011 11:52:00 555 disingkat
Šimon Tóth
sumber
1
Anda menulis ini di masa depan? itu sangat pintar !!
mikera
3

JavaScript

Versi kecil yang vardiperkecil ( alertpanggilan yang dijatuhkan dan dikurangi :

268 karakter

function g(m){n=u(confirm('Player pick?'));function u(p){if (p){do{n=parseInt(prompt('Number'))}while(isNaN(n)||!n||n>m)}else{n=parseInt(Math.random()*m)+1}return n}while(g!==n){do{g=parseInt(prompt('Guess'))}while(isNaN(g));alert(g<n?'higher':g>n?'lower':'correct')}}

Untuk menjalankan panggilan g(100);, eksekusi mandiri tidak dihitung, karena menambahkan sejumlah variabel karakter (275 karakter untuk g(100);).

asli (sekitar 600 karakter termasuk spasi):

function guessTheNumber(m)
{
  var n = getNum(confirm('Player pick the number?')), g;

  function getNum(p)
  {
    var n;
    if (p)
    {
      do
      {
        n = parseInt(prompt('What number?'));
      } while(isNaN(n) || !n || n > m);
    }
    else
    {
      n = parseInt(Math.random() * m) + 1;
    }
    return n;
  }

  while(g!==n)
  {
    do
    {
      g = parseInt(prompt('Take a guess!'));
    } while(isNaN(g));
    if (g < n)
    {
      alert('higher');
    }
    else if (g > n)
    {
      alert('lower');
    }
    else
    {
      alert('correct!');
    }
  }
}

Diminimalkan (312) :

function g(m){var g,n=u(confirm('Player pick?'));function u(p){var n;if (p){do{n=parseInt(prompt('Number'))}while(isNaN(n)||!n||n>m)}else{n=parseInt(Math.random()*m)+1}return n}while(g!==n){do{g=parseInt(prompt('Guess'))}while(isNaN(g));if(g<n) alert('higher');else if(g>n) alert('lower');else alert('correct')}}
zzzzBov
sumber
maaf, saya tidak memperhatikan. Lebih baik letakkan kode terbaru Anda di atas. (Juga, saya tidak bisa menjalankannya dengan benar: - /)
Eelvex
@Eelvex: Saat Anda mencoba menjalankannya, solusi saya lebih pendek daripada yang saat ini diterima lagi. Dan Anda harus benar-benar menentukan string yang tepat untuk digunakan saat berinteraksi dengan pengguna. Pada dasarnya semua yang dilakukan Magnus adalah menggunakan interaksi yang lebih ringkas yang tentu saja lebih pendek.
Joey
Apakah saya melihatnya dengan benar dan program ini tidak menangani kasus di mana manusia adalah pemain 1 dengan benar? Setidaknya saya tidak melihat kode untuk AI menebak angka dan pemain untuk memasukkan »lebih tinggi«, »lebih rendah« atau »benar« di mana saja ...
Joey
@ Joey, saya mendapat kesan bahwa jika seorang pemain manusia pergi duluan, mereka hanya perlu memilih nomor. Saya kira saya agak berkabut tentang mengapa seorang pemain manusia akan memilih yang lebih tinggi, lebih rendah, dan benar
zzzzBov
Cukup ikuti instruksi untuk pemain 1 dan 2. Salah satunya adalah manusia, yang lain adalah komputer. Tidak ada perbedaan dalam protokol. Juga kalimat »komputer harus benar-benar mencoba menebak angka saat bermain sebagai pemain dua« sangat menyiratkan bahwa komputer harus menebak angka.
Joey
3

Python 2.7 334 335 327 314 300 Karakter (Golf pertama kali saya)

(335) Lupa untuk melarikan diri dari baris baru.

(327) Dihapus berlebihan 100 untuk randint. Membandingkan karakter respons pertama, bukan keseluruhan string.

(314) Pencetakan diperbarui yang menang.

(300) Berubah ketika pemain adalah pemain 1: mengubah menebak nomor sebagai komputer

from random import*
i=input
s="Enter number:"
p=i("Player 1/2:")-1
h=100
N=(i(s),randint(1,h))[p]
b=l=0
for _ in[0]*5:
 exec("g=(h+l)/2;r=raw_input('Guessing '+`g`+':')[0];exec('h=g','l=g')[r=='l'];b=r=='c'","g=i(s);b=g==N;print(('higher','lower')[N<g],'correct')[b]")[p]
 if b:break
print 1+b,"won"
Rees
sumber
2

BASIC, 184

100 INPUT "P1 NUMBER? ";
200 FOR I%=1 TO 5
300 INPUT "P2 GUESS? ";G%
400 INPUT "P1 SENTENCE? ";S$
500 IF S$="CORRECT" THEN 800
600 NEXT I%
700 PRINT "WINNER 1":END
800 PRINT "WINNER 2"

Ini versi no-AI.

JB
sumber
Saya menyadari ini adalah jawaban lama, tapi saya tidak tahu ini dulu dan saya baru saja menemukan ini - Anda mungkin bisa menggunakan nomor baris yang lebih pendek seperti 1, 2, 3, dll., Atau hanya mengasumsikan sesuatu seperti QBASIC / FreeBASIC dan hilangkan mereka sepenuhnya.
nyuszika7h
@ nyuszika7h Ini lebih merupakan kontes popularitas daripada golf kode, saya lebih suka memilih angka seratus kisaran yang lebih tipikal.
JB
Ini? Ya, ini ditandai code-golf.
nyuszika7h
Dengan kondisi menang spesifik dan eksplisit (dan buruk, IMHO).
JB
Oh benar, saya memang melihat itu tetapi melupakannya.
nyuszika7h
2

Lua 360 Chars

i=io.read p=print I=5 N=100 math.randomseed(os.time())r=math.random p"Play as player one or two?"o=i"*n">1 _=o and p("Input number between 1 and",N)n=o and i"*n"or r(I,N)l,u=1,N for k=1,I do p"Guess!"g=o and r(l,u)or i"*n"p("Guessed",g)if n==g then p"Correct"break elseif n>g then p"Higher"l=g else p"Lower"u=g end end p(o and"I"or"You",n==g and"Won"or"Loose")

Versi non-golf:

i=io.read
p=print
I=5
N=100
math.randomseed(os.time())      -- Make things less predictable
r=math.random                   
p"Play as player one or two?"
o=i"*n">1
_=o and p("Input number between 1 and",N) -- if one, ask for number
n=o and i"*n"or r(I,N)          -- get number from user or random
l,u=1,N                         -- boundaries for doing "smart" guessing
for k=1,I do
    p"Guess!"
    g=o and r(l,u)or i"*n"      -- get guess (random or input)
    p("Guessed",g)
    if n==g then p"Correct!"break -- break loop if guessed correctly
    elseif n>g then             -- if guess to low
    p"Higher"l=g else           -- print + update boundaries
    p"Lower"u=g end
end
p(o and"I"or"You",n==g and"Won"or"Loose") -- Determine outcome!
jpjacobs
sumber
2

Javascript

Ini adalah sekitar 800 karakter, dan termasuk pilihan biner dasar Anda 'AI' untuk setengah pemutar komputer. Saya mungkin bisa menyimpan beberapa karakter jika saya menghilangkan semua karakter saya vartetapi saya tidak suka membocorkan variabel bahkan ketika bermain golf kode. Saya juga melakukan dua langkah "Apakah ini benar?" / "Apakah ini lebih tinggi?" hal dengan konfirmasi pop-up daripada memberikan pop-up cepat dan memeriksa "benar" / "lebih tinggi" / "lebih rendah" meskipun itu mungkin juga bisa menyelamatkan beberapa karakter, saya tidak benar-benar memeriksa.

Juga, saya hanya mengujinya di Firefox 4, jadi saya tidak tahu apakah beberapa hal yang saya lakukan bekerja secara konsisten, terutama menyatukan input yang tidak valid, diuraikan sebagai NaN, ke nilai default dalam wpfungsi saya .

function game(N, I) {
    var wa=function(a){window.alert(a)};
    var wc=function(s){return window.confirm(s)};
    var wp=function(s){return window.prompt(s)};
    var ri=function(s,d){return parseInt(wp(s),10)||d};
    var m=function(l,h){return Math.round((h+l)/2)};
    N = N || pd("Highest possible number?",100);
    I = I || pd("How many guesses?",5);
    var p = wc("Be player 2?");
    var s = [1,N];
    var a = p?Math.ceil(Math.random()*N):Math.min(N,Math.max(1,ri("Pick a number from 1 to " + N,1)));
    var w = 0;
    var g = 0;
    if(p) while(I--){while(!(g = ri("Guess:",0)));if(g==a){wa("correct");w=p+1;break;}else{wa(g<a?"higher":"lower")}}
    else while(I--){g = m(s[0],s[1]);if(wc("Is "+g+" correct?")) { w=p+1;break;} else if (wc("Is "+g+" higher?")){s=[s[0],g];}else{s=[g,s[1]];}}
    if(!w)w=!p+1;
    wa("Player " + w + " wins!");
}
game(100,5);
Blair Mitchelmore
sumber
2

Java, 1886 karakter

import java.io.*;import java.util.*;import java.util.regex.*;public class GuessGame {int L=1;int H=100;int G=5;int N;String HS="higher";String LS="lower";String CS="correct";public static void main(String[] args){if (args.length==2)new GuessGame(Integer.parseInt(args[0]),Integer.parseInt(args[1])).play();else if(args.length==0)new GuessGame(100,5).play();else System.out.println("usage GuessGame HighInteger NumberGuess");}GuessGame(int H,int G){this.H = H;this.G = G;}void play(){int pNum=getInt("Play As Player 1 or Player 2?","1|2");if(pNum==1)playP2();else playP1();System.out.println("The number was "+N);}int getInt(String pmpt,String val){BufferedReader cin=new BufferedReader(new InputStreamReader(System.in));int i=0;Pattern p=Pattern.compile(val);boolean fnd=false;String ln="";try{while(!fnd){System.out.println(pmpt);ln=cin.readLine();Matcher m=p.matcher(ln);fnd=m.find();}i=Integer.parseInt(ln);} catch (Exception ex) {}return i;}String processGuess(int g){if(N>g)return HS;else if(N<g)return LS;else return CS;}void playP1(){N=new Random().nextInt(H);for(;G>0;G--){String rslt=processGuess(getInt("Player 2, enter your guess:","\\d?"));System.out.println(rslt);if(rslt.equals(CS)){System.out.println("Player 2 wins!");break;}}}void playP2() {N=getInt("Player 1, enter your number:", "\\d+");int max=H;int min=L;int nextGuess=min+(max-min)/2;for (;G>0;G--){System.out.println("Player 2, enter your guess:" + nextGuess);String rslt=processGuess(nextGuess);System.out.println(rslt);if(rslt.equals(HS)){min=nextGuess+1;nextGuess=fuzzify(nextGuess+(max-nextGuess)/2,min,max);}if (rslt.equals(LS)){max=nextGuess-1;nextGuess=fuzzify(nextGuess-(nextGuess-min)/2,min,max);}if(rslt.equals(CS)){System.out.println("Player 2 wins!");break;}}}int fuzzify(int i,int mn,int mx){int fz=new Random().nextInt(3);if(fz==1)return Math.max(mn,--i);if(fz==2)return Math.min(mx,++i);return i;}}

Versi bukan golf:

import java.io.*;
import java.util.*;
import java.util.regex.*;
public class GuessGame {
    int L = 1;
    int H = 100;
    int G = 5;
    int N;
    String HS = "higher";
    String LS = "lower";
    String CS = "correct";
    public static void main(String[] args) {
        if (args.length == 2)
            new GuessGame(Integer.parseInt(args[0]), Integer.parseInt(args[1])).play();
        else if (args.length == 0)
            new GuessGame(100, 5).play();
        else
            System.out.println("usage GuessGame HighInteger NumberGuess");
    }
    GuessGame(int H, int G) {
        this.H = H;
        this.G = G;
    }
    void play() {
        int pNum = getInt("Play As Player 1 or Player 2?","1|2");
        if (pNum == 1)
            playP2();
        else
            playP1();
        System.out.println("The number was " + N);
    }
    int getInt(String pmpt, String val) {
        BufferedReader cin = new BufferedReader(new InputStreamReader(System.in));
        int i = 0;
        Pattern p = Pattern.compile(val);
        boolean fnd = false;
        String ln = "";
        try {
            while (!fnd) {
                System.out.println(pmpt);
                ln = cin.readLine();
                Matcher m = p.matcher(ln);
                fnd = m.find();
            }
            i = Integer.parseInt(ln);
        } catch (Exception ex) {}
        return i;
    }
    String processGuess(int g) {
        if (N > g)
            return HS;
        else if (N < g)
            return LS;
        else
            return CS;
    }
    void playP1() {
        N = new Random().nextInt(H);
        for (; G > 0; G--) {
            String rslt = processGuess(getInt("Player 2, enter your guess:", "\\d?"));
            System.out.println(rslt);
            if (rslt.equals(CS)) {
                System.out.println("Player 2 wins!");
                break;
            }
        }
    }
    void playP2() {
        N = getInt("Player 1, enter your number:", "\\d+");
        int max = H;
        int min = L;
        int nextGuess = min + (max - min) / 2;
        for (; G > 0; G--) {
            System.out.println("Player 2, enter your guess:" + nextGuess);
            String rslt = processGuess(nextGuess);
            System.out.println(rslt);
            if (rslt.equals(HS)) {
                min = nextGuess + 1;
                nextGuess = fuzzify(nextGuess + (max - nextGuess) / 2, min, max);
            }
            if (rslt.equals(LS)) {
                max = nextGuess - 1;
                nextGuess = fuzzify(nextGuess - (nextGuess - min) / 2, min, max);
            }
            if (rslt.equals(CS)) {
                System.out.println("Player 2 wins!");
                break;
            }
        }
    }
    int fuzzify(int i, int mn, int mx) {
        int fz = new Random().nextInt(3);
        if (fz == 1)
            return Math.max(mn, --i);
        if (fz == 2)
            return Math.min(mx, ++i);
        return i;
    }
}
Joe Zitzelberger
sumber
Pertama-tama: Itu bahkan tidak dapat dikompilasi, karena Java tidak memiliki string multi-line. Anda tidak dapat berharap untuk memecah garis di tengah-tengah string dan itu berfungsi.
Joey
Ok, saya berhenti berusaha membuatnya terlihat bagus di layar dan hanya menempelkan satu baris.
Joe Zitzelberger
1
Selanjutnya (penghematan dalam tanda kurung): Kelas dapat dinamai dengan satu huruf (40). Ada banyak spasi putih yang tidak perlu di sana (80). Anda dapat menutup deklarasi beberapa variabel dari jenis yang sama, misalnya int a=5,b=10(34). Anda dapat memberi nama argumen di konstruktor yang berbeda dari bidang yang harus dihindari this.(10). Anda dapat menghilangkan Lsemuanya karena selalu tetap pada 1(4). Anda dapat mengabaikan inisialisasi Hdan Gyang ditetapkan di konstruktor (6). Anda dapat menggunakan nama satu huruf untuk semua variabel dan metode (235).
Joey
Benar, tapi itu sama sekali tidak bisa dibaca. Ini adalah titik di mana saya melihat kode-golf benar-benar menjadi kode-bowling. Tetapi jika saya menemukan waktu, saya akan memolesnya malam ini.
Joe Zitzelberger
1
Koreksi untuk gambar sebelumnya: (272). Anda dapat menulis ulang fuzzifymenggunakan operator kondisional (20). Anda dapat memasukkan BufferedReaderin getInt(19). Anda dapat menggunakan String#matchesuntuk menghindari Patterndan Matcherdalam getInt(48). Anda dapat menggunakan operator kondisional processGuessjuga (30). Saya sekarang turun ke 1360 alih-alih tahun 1953 awal Anda.
Joey
2

Radio Jam Alarm, 5756 bit (2159 byte)

Segera datang ke jam alarm di dekat Anda! Baris baru hanya untuk keterbacaan. Nilai ASCII kadang-kadang digunakan sebagai pengganti tampilan numerik literal di layar. Sesuai dengan spesifikasi. Menggunakan default untuk Adan I. Pada input pertama, gunakan NULL untuk menebak, jika tidak, Anda akan mengatur angkanya. PADSIZE HARUS 4! SEL HARUS 7-BIT DAN Bungkus! Turing-lengkap! Output higher, lower, correct, you won, dan you lost.

}+>,[,>>+++++++[>>>>>>>+++++++>+++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++]>>>>>>>++++++.>>>>>>>++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++[+++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++>+++>>>>>>>]>++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++.++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.++++++.++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++[++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++>+>>>>>>>]>+++.+++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++[
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++>++++>>>>>>>]>+++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++.+++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++.[+]+][++++[+++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++>,[+[+++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++>++>>>>>>>]>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.+++.++++++++.[+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++>+++>>>>>>>]>.+++++++++++++.[+
]+][++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++[++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++>+>>>>>>>]>++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
++++++++++++.+++..++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++.++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++.+++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++[+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++>+>>>>>>>]>+++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++.>>>>>>>[+]>>>>>>>+++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++]]][>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++[++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++>+++>>>>>>>]>+++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++.+++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.++++++.+++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++[+++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++>+>>>>>>>]>+++.++[+++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+
+>>>>>>>]>.+++.++++.+.>>>>>>>[+]+][+++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++[++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++>+++>>>>>>>]>+++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++.+++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
++++++.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++[+++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++>+>>>>>>>]>+++.++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++[+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++>>>>>>>]>++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++.++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.]
Timtech
sumber
1

Ruby 1.9 (298)

b=->f{puts "> "+f;gets}
a=->f{b[f].to_i}
q=a["Player 1 or 2?"]
i,j,g=100,1
n=q<2?a["Enter number:"]:rand(i)+j
5.times{q<2?(g=j+(i-j)/2
c=b["Guessing, #{g}"]
c[0]==?c?break: c[0]==?h?j=g :i=g):(
g=a["Guess:"]
puts g==n ?"correct":g<n ?"higher":"lower"
g==n&&break)}
puts "Player #{g==n ?2:1} won!"

Instruksi tidak terlalu ramah.

Magnus Holm
sumber
Sangat bagus! Andai saja Anda memiliki beberapa pengacakan ketika AI adalah pemain 2 ...
Eelvex
@Eelvex, dikalahkan oleh 30 karakter.
zzzzBov
1

Saya merasa perlu melakukan keadilan Jawa. :)

Jawa - 486 437 421 414

Golf

import java.util.*;class GuessANumber{static<T>void p(T p){System.out.println(p);}static int i(){return new Scanner(System.in).nextInt();}public static void main(String[]a){int c,g,f=101,i=0;p("Pick (1) or guess (2)?");c=i();if(c==1)p("Pick a number (1-100)");g=c==1?i():new Random().nextInt(100);while(f!=g&&i++<5){p("Guess:");f=c==2?i():f>g?f/2:f+f/2;if(c==1)p(f);p(f>g?"lower":"higher");}if(f==g)p("correct");}}

Sedikit Tidak Digolkan

import java.util.*;

class a{

    static<T>void p(T p){
        System.out.println(p);
    }

    static int i(){
        return new Scanner(System.in).nextInt();
    }

    public static void main(String[]a){
        int c,g,f=101,i=0;
        p("Pick (1) or guess (2)?");
        c=i();
        if(c==1)p("Pick a number (1-100)");
        g=c==1?i():new Random().nextInt(100);
        while(f!=g&&i++<5){
            p("Guess:");
            f=c==2?i():f>g?f/2:f+f/2;
            if(c==1)p(f);
            p(f>g?"lower":"higher");
        }
        if(f==g)p("correct");
    }
}
asteri
sumber