Indovina il numero


10

Descrizione

Crea un gioco "Indovina il numero" completamente funzionante. Il gioco è giocato da due giocatori come segue:

  1. il giocatore uno sceglie un numero (A) tra 1 e N
  2. il giocatore due prova a indovinare A scegliendo un numero (B) nello stesso intervallo
  3. il primo giocatore risponde "più alto" if A > B , "più basso" if A < B o "corretto" if A = B .
  4. i passaggi 2-3 vengono ripetuti I volte o fino alla risposta "corretta".
  5. Se si sente "corretto", il giocatore due vince altrimenti perde.

Specifiche

Specifiche minime per una voce valida:

  • l'utente può giocare come giocatore uno o giocatore due.
  • il computer gioca l'altro ruolo.
  • il computer deve davvero provare a indovinare il numero mentre gioca come giocatore due (quindi, indovinare i dati dati o ignorare i dati dati è barare)
  • N = 100 o immessi dall'utente (a scelta)
  • I = 5 o input dell'utente (a tua scelta)
  • il programma deve annunciare il vincitore alla fine.
  • istruzioni completamente leggibili dall'uomo su cosa fare in ogni passaggio (ad es. "Gioca come giocatore uno o giocatore due?" , "Inserisci un'altra ipotesi:" , ecc.) - Non impazzire su questo; mantienilo semplice.

Condizioni vincenti

In questo ordine:

  1. L'iscrizione più votata vince se è almeno 3 voti prima della seconda voce più votata.
  2. Vince l'ingresso più breve.

Non ho letto esplicitamente che avevamo bisogno di un'intelligenza artificiale su quello. Potresti confermare che entrambi i giocatori sono umani?
JB

@JB: spiacente a tale proposito: / Tu non hanno bisogno di una IA. Sto aggiornando la domanda ora ...
Eelvex,

2
Penso che dovrebbero essere forniti i testi delle istruzioni per ogni passaggio, altrimenti è difficile confrontare le risposte.
Joey,

@Joey Definitely
Šimon Tóth

La convalida dell'input dell'utente è importante?
zzzzBov

Risposte:


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

Storia:

  • 21/02/2011 18:44 (620) Ungolfed.
  • 21/02/2011 19:15 (365) Primo round di golf.
  • 21/02/2011 19:31 (359) Some inining.
  • 21/02/2011 19:38 (340) Alcune stringhe abbreviate.
  • 21/02/2011 19:44 (339) whilefor
  • 21/02/2011 19:53 (331) Alcune stringhe duplicate estratte in variabili.
  • 21/02/2011 19:53 (330) Un'altra variabile inline.
  • 21/02/2011 19:53 (328) Condizione di loop ottimizzata. Tuttavia, non è possibile utilizzare una pipeline.
  • 22/02/2011 01:57 (326) else{if...}elseif- salva le parentesi graffe.
  • 22/02/2011 12:42 (325) Ha spostato molte cose in giro, usando una tabella hash invece che switchper evitare di nominare il loop. Ora posso usare anche solo breakuna pipeline. L'annuncio del vincitore è stato spostato in un filtro che utilizza exitquindi nessuna interruzione richiesta, mai.
  • 23/02/2011 01:23 (308) Invece di una elseifcatena per il controllo dell'ipotesi, utilizzo solo una stringa di formato con valori diversi per valori negativi, positivi e zero. Risparmia molto.
  • 23/02/2011 02:16 (306) Utilizzo della sottrazione anziché dell'uguaglianza.
  • 2011-03-12 02:27 (289) Ridotto allo stesso livello di interazione rudimentale con l'utente della soluzione Ruby. Ovviamente è più breve allora.

9

TRS-80 BASIC, 249 caratteri

Penso che questa potrebbe essere la prima volta che invio una risposta a questo sito che ho scritto prima che il sito esistesse.

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

In effetti, l'ho scritto prima che esistesse la rete mondiale. Negli anni '80, proprio come i TRS-80 stavano diventando irrilevanti.

Questo è un esempio di "one-liner", un tentativo di adattare il programma più interessante che potresti trovare in una singola riga di BASIC. È stato il mio primo one-liner e non terribilmente impressionante. (C'erano alcune incredibili navi da crociera galleggianti là fuori.)

Una linea di TRS-80 BASIC era limitata a 255 caratteri, meno una coppia per le spese generali. Anche se a volte potresti superare questo limite, poiché il limite reale era 255 byte dopo la tokenizzazione, ma l'editor avrebbe anche troncato una linea che aveva più di 255 caratteri prima della tokenizzazione e per inserire caratteri di controllo letterali era necessario usare trucchi nell'editor di linea come newline nelle tue corde.

E sì, per chiarire, quelle interruzioni di riga nell'elenco sono caratteri letterali di nuova riga. (Per inserirli nel codice è necessario utilizzare il Ccomando hange mentre si EDITesegue la riga. Un dolore totale, ma vale la pena sostituire otto o più caratteri +CHR$(13)con uno.)

Accidenti, gioco a golf da molto tempo.


6

C 397 personaggi

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);}

In una forma più leggibile.

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);
}

@Joey ora corretto.
fR0DDY,

beh, non conosco il completo C. Ma puoi spiegare come si compila un programma con variabili senza specificatore di tipo?
MAKZ,

Qualsiasi variabile senza un tipo specificato è un numero intero
Etirarico

4

C #:

Numero di caratteri: Con spazi: 575 Nessuno spazio: 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);
    }

Modifica do while è ora "Goto" ( brividi )


3

Buona vecchia pianura 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 simpatico e accogliente
  • 24/11/2011 09:38:00 616 fissi e abbreviati
  • 24/11/2011 11:52:00 555 abbreviato

1
hai scritto questo in futuro? è molto intelligente !!
Mikera,

3

JavaScript

Nuova versione ridotta (eliminata vare ridottaalert chiamate :

268 caratteri

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')}}

Per eseguire la chiamata g(100);, l'autoesecuzione non viene conteggiata, in quanto aggiunge un numero variabile di caratteri (275 caratteri perg(100); ).

originale (da qualche parte circa 600 caratteri incluso lo spazio bianco):

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!');
    }
  }
}

Minificato (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')}}

scusa, non me ne sono accorto. Meglio mettere il tuo ultimo codice in alto. (Inoltre, non riesco a farlo funzionare correttamente: - /)
Eelvex

@Eelvex: mentre stai cercando di farlo funzionare, la mia soluzione è più breve di quella attualmente accettata di nuovo. E dovresti davvero specificare le stringhe esatte da usare quando interagisci con l'utente. Fondamentalmente tutto ciò che Magnus ha fatto è stato usare un'interazione più concisa che ovviamente è più breve.
Joey,

Lo sto vedendo correttamente e questo programma non gestisce il caso in cui l'essere umano è correttamente il giocatore 1? Almeno non vedo il codice per l'intelligenza artificiale per indovinare un numero e il giocatore deve inserire »superiore«, »inferiore« o »corretta« ovunque ...
Joey

@Joey, avevo l'impressione che se un giocatore umano dovesse andare per primo, dovrebbe solo scegliere un numero. Immagino di essere un po 'annebbiato sul perché un giocatore umano scelga più in alto, più in basso e corretto
zzzzBov

Segui le istruzioni per i giocatori 1 e 2. Uno di loro è un essere umano, l'altro è un computer. Non c'è differenza nel protocollo, però. Anche la frase »computer deve davvero provare a indovinare il numero mentre si gioca come giocatore due« implica molto che il computer deve indovinare un numero.
Joey,

3

Python 2.7 334 335 327 314 300 Personaggi (La mia prima partita a golf)

(335) Dimenticato di scappare da Newline.

(327) Rimossi 100 ridondanti per randint. Confronto del primo carattere di risposta, anziché dell'intera stringa.

(314) Stampa aggiornata che ha vinto.

(300) Modificato quando il giocatore era giocatore 1: cambiato il numero di indovinare come computer

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"

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"

Ecco la versione senza AI.


Mi rendo conto che questa è una vecchia risposta, ma allora non lo sapevo e mi sono appena imbattuto in questo - potresti probabilmente usare numeri di riga più brevi come 1, 2, 3, ecc., O semplicemente assumere qualcosa come QBASIC / FreeBASIC e ometterli completamente.
nyuszika7h

@ nyuszika7h È più una gara di popolarità che il golf di codice, preferirei scegliere i numeri più tipici a cento intervalli.
JB

È? Bene, è taggato code-golf.
nyuszika7h,

Con condizioni vincenti specifiche ed esplicite (e scadenti, IMHO).
JB

Oh giusto, l'ho visto ma l'ho dimenticato.
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")

Versione non golfata:

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!

2

Javascript

Sono circa 800 caratteri e includono la selezione binaria di base 'AI' per la metà del lettore di computer. Potrei probabilmente salvare alcuni personaggi se mi sbarazzassi di tutti i mieivar , ma non mi piace perdere le variabili anche durante il golf del codice. Ho anche fatto due passi "È corretto?" / "È più alto?" cosa con i pop-up di conferma piuttosto che dare un pop-up rapido e controllare "corretto" / "più alto" / "più basso" anche se ciò potrebbe forse salvare anche alcuni personaggi, non ho davvero controllato.

Inoltre, l'ho testato solo su Firefox 4, quindi non so se alcune delle cose che sto facendo funzionano in modo coerente, in particolare unendo un input non valido, analizzato come NaN, a un valore predefinito nella mia wpfunzione.

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);

2

Java, 1886 caratteri

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;}}

Versione non golfata:

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;
    }
}

Prima di tutto: non si compila nemmeno, poiché Java non ha stringhe multilinea. Non puoi aspettarti di spezzare le linee nel mezzo di una stringa e che funzioni.
Joey,

Ok, ho smesso di provare a farlo apparire bene sullo schermo e ho appena incollato la linea singola.
Joe Zitzelberger,

1
Inoltre (risparmio tra parentesi): la classe può essere nominata con una sola lettera (40). C'è un sacco di spazi bianchi non necessari lì dentro (80). È possibile comprimere le dichiarazioni di più variabili dello stesso tipo, ad esempio int a=5,b=10(34). Puoi evitare che gli argomenti nel costruttore siano diversi dai campi da evitare this.(10). Puoi eliminarlo del Ltutto poiché rimane sempre in 1(4). Puoi tralasciare l'inizializzazione di He Gche si imposta comunque nel costruttore (6). È possibile utilizzare nomi di una lettera per tutte le variabili e i metodi (235).
Joey

Vero, ma sarebbe totalmente illeggibile. Questo è il punto in cui vedo il code-golf diventare veramente il bowling. Ma se trovo un po 'di tempo, lo aggiusterò stasera.
Joe Zitzelberger,

1
Correzione per la figura precedente: (272). Puoi riscrivere fuzzifyusando l'operatore condizionale (20). È possibile incorporare BufferedReaderin getInt(19). È possibile utilizzare String#matchesper evitare Patterne Matcherin getInt(48). È possibile utilizzare anche l'operatore condizionale in processGuess(30). Ora sono al 1360 invece del tuo primo 1953.
Joey

2

Radio sveglia, 5756 bit (2159 byte)

Prossimamente a una sveglia vicino a te! Newline sono solo per la leggibilità. I valori ASCII vengono utilizzati occasionalmente al posto della visualizzazione numerica letterale sullo schermo. Adatto alle specifiche. Utilizza i valori predefiniti per Ae I. Al primo input, usa NULL per indovinare, altrimenti imposterai il numero. IL PADSIZE DEVE ESSERE 4! LE CELLULE DEVONO ESSERE A 7 BIT E AVVOLGERE! Turing-completo! Uscite higher, lower, correct, you won, e you lost.

}+>,[,>>+++++++[>>>>>>>+++++++>+++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++]>>>>>>>++++++.>>>>>>>++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++[+++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++>+++>>>>>>>]>++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++.++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.++++++.++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++[++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++>+>>>>>>>]>+++.+++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++[
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++>++++>>>>>>>]>+++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++.+++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++.[+]+][++++[+++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++>,[+[+++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++>++>>>>>>>]>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.+++.++++++++.[+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++>+++>>>>>>>]>.+++++++++++++.[+
]+][++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++[++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++>+>>>>>>>]>++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
++++++++++++.+++..++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++.++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++.+++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++[+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++>+>>>>>>>]>+++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++.>>>>>>>[+]>>>>>>>+++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++]]][>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++[++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++>+++>>>>>>>]>+++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++.+++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.++++++.+++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++[+++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++>+>>>>>>>]>+++.++[+++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+
+>>>>>>>]>.+++.++++.+.>>>>>>>[+]+][+++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++[++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++>+++>>>>>>>]>+++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++.+++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
++++++.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++[+++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++>+>>>>>>>]>+++.++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++[+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++>>>>>>>]>++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++.++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.]

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!"

Istruzioni non molto amichevoli però.


Molto bella! Se solo avessi qualche randomizzazione quando AI è il giocatore 2 ...
Eelvex

@Eelvex, battuto da 30 caratteri.
zzzzBov

1

Ho sentito il bisogno di rendere giustizia a Java. :)

Java - 486 437 421 414

golfed

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");}}

Leggermente ungolfed

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");
    }
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.