Adivina el número

10

Descripción

Crea un juego completamente funcional "Adivina el número". El juego es jugado por dos jugadores de la siguiente manera:

  1. el jugador uno elige un número (A) entre 1 y N
  2. el jugador dos intenta adivinar A eligiendo un número (B) en el mismo rango
  3. el primer jugador responde "más alto" if A > B , "más bajo" if A < B o "correcto" if A = B .
  4. los pasos 2-3 se repiten I veces o hasta que se responda "correcto".
  5. Si se escucha "correcto", el jugador dos gana, de lo contrario pierde.

Especificaciones

Especificaciones mínimas para una entrada válida:

  • el usuario puede jugar como jugador uno o jugador dos.
  • la computadora juega el otro papel.
  • la computadora realmente debe intentar adivinar el número mientras juega como jugador dos (por lo tanto, adivinar los datos dados o ignorar los datos dados es hacer trampa)
  • N = 100 o entrada por el usuario (su elección)
  • I = 5 o entrada del usuario (su elección)
  • El programa debe anunciar el ganador al final.
  • instrucciones completas y legibles para humanos sobre qué hacer en cada paso (por ejemplo, "¿Jugar como jugador uno o jugador dos?" , "Ingrese otra conjetura:" , etc.): no se vuelva loco en este paso; solo mantenlo simple.

Condiciones ganadoras

En ese orden:

  1. La entrada más votada gana si es al menos 3 votos por delante de la segunda entrada más votada.
  2. La entrada más corta gana.
Eelvex
fuente
No leí explícitamente que necesitábamos una IA en eso. ¿Podrías confirmar que ambos jugadores son humanos?
JB
@JB: Lo siento: / Usted no necesita una IA. Estoy actualizando la pregunta ahora ...
Eelvex
2
Creo que los textos de instrucciones para cada paso deben darse, de lo contrario es difícil comparar las respuestas.
Joey
@Joey definitivamente
Šimon Tóth
¿Es importante la validación de entrada del usuario?
zzzzBov

Respuestas:

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

Historia:

  • 2011-02-21 18:44 (620) Sin golfos.
  • 2011-02-21 19:15 (365) Primera ronda de golf.
  • 2011-02-21 19:31 (359) Algunas líneas.
  • 2011-02-21 19:38 (340) Algunas cadenas acortadas.
  • 2011-02-21 19:44 (339) whilefor
  • 2011-02-21 19:53 (331) Algunas cadenas duplicadas extraídas en variables.
  • 2011-02-21 19:53 (330) Otra variable en línea.
  • 2011-02-21 19:53 (328) Condición de bucle optimizada. Sin embargo, no se puede usar una tubería.
  • 2011-02-22 01:57 (326) else{if...}elseif: guarda las llaves.
  • 2011-02-22 12:42 (325) Se movieron muchas cosas, usando una tabla hash en lugar de la switchpara evitar nombrar el bucle. Ahora puedo usar solo breaky una tubería, también. El anuncio del ganador se trasladó a un filtro que usa, exitpor lo que no se requiere ningún descanso.
  • 2011-02-23 01:23 (308) En lugar de una elseifcadena para verificar la suposición, solo uso una cadena de formato con diferentes valores para valores negativos, positivos y cero. Ahorra mucho
  • 2011-02-23 02:16 (306) Usar resta en lugar de igualdad.
  • 2011-03-12 02:27 (289) Reducido al mismo nivel de interacción de usuario rudimentaria que la solución Ruby. Por supuesto que es más corto entonces.
Joey
fuente
9

TRS-80 BASIC, 249 caracteres

Creo que esta puede ser la primera vez que envíe una respuesta a este sitio que escribí antes de que existiera.

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

De hecho, lo escribí antes de que existiera la web mundial. En la década de 1980, justo cuando los TRS-80 se estaban volviendo irrelevantes.

Este es un ejemplo de un "one-liner": un intento de adaptar el programa más interesante que pueda en una sola línea de BASIC. Fue mi primera frase, y no terriblemente impresionante. (Había algunas frases increíbles flotando por ahí).

Una línea de TRS-80 BASIC estaba limitada a 255 caracteres, menos un par para gastos generales. Aunque a veces podría exceder esto, ya que el límite verdadero era 255 bytes después de la tokenización, pero el editor también truncaría una línea que tenía más de 255 caracteres antes de la tokenización, y necesitaba usar trucos en el editor de líneas para insertar caracteres de control literales como nuevas líneas en tus cadenas.

Y sí, para aclarar, esos saltos de línea en el listado son caracteres de nueva línea literales. (Para poder Cincluirlos en su código, tenía que usar el comando de suspensión mientras marcaba EDITla línea. Un dolor total, pero valía la pena reemplazar ocho o más caracteres por +CHR$(13)uno).

Maldición, he estado jugando al golf por mucho tiempo.

caja de pan
fuente
6

Personajes C 397

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

En una forma más legible.

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
fuente
@Joey corregido ahora.
fR0DDY
bueno, no sé la C. completa, pero ¿podría explicar cómo compila un programa con variables sin especificador de tipo?
MAKZ
Cualquier variable sin tipo especificado es un entero
Ethiraric
4

C#:

Recuento de caracteres: Con espacios: 575 Sin espacios: 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);
    }

Editar hacer mientras ahora es "Goto" ( escalofrío )

Yngve B-Nilsen
fuente
3

Buena vieja llanura 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 agradable y acogedor
  • 24/11/2011 09:38:00 616 fijo y acortado
  • 24/11/2011 11:52:00 555 acortado
Šimon Tóth
fuente
1
escribiste esto en el futuro? eso es muy inteligente !!
mikera
3

JavaScript

Nueva versión minificada ( llamadas caídas vary reducidas alert:

268 caracteres

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

Para ejecutar la llamada g(100);, la ejecución automática no se cuenta, ya que agrega un número variable de caracteres (275 caracteres para g(100);).

original (en algún lugar alrededor de 600 caracteres, incluido el espacio en blanco):

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

Minificado (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
fuente
lo siento, no me di cuenta. Mejor ponga su último código en la parte superior. (Además, no puedo hacer que funcione correctamente: - /)
Eelvex
@Eelvex: Mientras intentas que eso se ejecute, mi solución es más corta que la actualmente aceptada nuevamente. Y realmente debe especificar las cadenas exactas que se utilizarán al interactuar con el usuario. Básicamente, todo lo que Magnus ha hecho fue utilizar una interacción más concisa, que por supuesto es más corta.
Joey
¿Estoy viendo eso correctamente y este programa no maneja el caso donde el humano es el jugador 1 correctamente? Por lo menos yo no veo código para el AI de adivinar un número y el jugador para entrar »superior«»bajar«o»correcta« en cualquier lugar ...
Joey
@Joey, tenía la impresión de que si un jugador humano fuera primero, solo tendría que elegir un número. Supongo que estoy un poco confuso sobre por qué un jugador humano elegiría más alto, más bajo y correcto
zzzzBov
Simplemente siga las instrucciones para los jugadores 1 y 2. Uno de ellos es un humano, el otro es una computadora. Sin embargo, no hay diferencia en el protocolo. Además, la oración "la computadora realmente debe tratar de adivinar el número mientras juega como jugador dos" implica mucho que la computadora tiene que adivinar un número.
Joey
3

Python 2.7 334 335 327 314 300 Personajes (Mi primera vez jugando al golf)

(335) Olvidé escapar de la nueva línea.

(327) Eliminado 100 redundantes para randint. Comparación del primer carácter de respuesta, en lugar de la cadena completa.

(314) Impresión actualizada quién ganó.

(300) Cambiado cuando el jugador era el jugador 1: cambio de adivinar el número como computadora

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
fuente
2

BÁSICO, 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"

Aquí está la versión sin AI.

JB
fuente
Me doy cuenta de que esta es una respuesta antigua, pero no lo sabía en ese momento y me topé con esto: probablemente podría usar números de línea más cortos como 1, 2, 3, etc., o simplemente asumir algo como QBASIC / FreeBASIC y omítalos por completo.
nyuszika7h
@ nyuszika7h Es más un concurso de popularidad que el golf de código, prefiero ir a los números más típicos de cien rangos.
JB
¿Es? Bueno, está etiquetado code-golf.
nyuszika7h
Con condiciones ganadoras específicas y explícitas (y pésimas, en mi humilde opinión).
JB
Ah, claro, lo vi pero lo olvidé.
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ón sin 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
fuente
2

Javascript

Tiene aproximadamente 800 caracteres e incluye su selección binaria básica 'AI' para la mitad del jugador de la computadora. Probablemente podría guardar algunos caracteres si me deshago de todos mis varcorreos electrónicos, pero no me gustan las variables con fugas, incluso mientras se juega golf de código. También hice dos pasos "¿Es esto correcto?" / "¿Es esto más alto?" con las ventanas emergentes de confirmación en lugar de dar una ventana emergente rápida y buscar "correcto" / "más alto" / "más bajo", aunque eso también podría salvar algunos caracteres, realmente no lo comprobé.

Además, solo lo probé en Firefox 4, por lo que no sé si algunas de las cosas que estoy haciendo funcionan de manera consistente, particularmente fusionando una entrada no válida, analizada como NaN, a un valor predeterminado en mi wpfunción.

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
fuente
2

Java, 1886 caracteres

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ón sin 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
fuente
En primer lugar: eso ni siquiera se compila, ya que Java no tiene cadenas de varias líneas. No puede esperar romper líneas en el medio de una cadena y que funcione.
Joey
Ok, dejé de intentar que se viera bien en la pantalla y simplemente pegué la línea.
Joe Zitzelberger
1
Además (ahorro entre paréntesis): la clase se puede nombrar con una sola letra (40). Hay un montón de espacios en blanco innecesarios allí (80). Puede contraer declaraciones de múltiples variables del mismo tipo, por ejemplo int a=5,b=10(34). Puede nombrar los argumentos en el constructor diferentes de los campos para evitar this.(10). Puede eliminar por Lcompleto ya que siempre permanece en 1(4). Puede omitir la inicialización de Hy Gque se establece en el constructor de todos modos (6). Puede usar nombres de una letra para todas las variables y métodos (235).
Joey
Es cierto, pero eso sería totalmente ilegible. Este es el punto donde veo que el golf de código se está convirtiendo en un juego de bolos de código. Pero si encuentro algo de tiempo, lo puliré esta noche.
Joe Zitzelberger
1
Corrección para la figura anterior: (272). Puede reescribir fuzzifyusando el operador condicional (20). Puede en línea BufferedReaderen getInt(19). Puede usar String#matchespara evitar el Patterny Matcheren getInt(48). También puede usar el operador condicional en processGuess(30). Ahora estoy en 1360 en lugar de su inicial de 1953.
Joey
2

Radio reloj despertador, 5756 bits (2159 bytes)

¡Próximamente en un despertador cerca de ti! Las nuevas líneas son solo para legibilidad. Los valores ASCII se usan ocasionalmente en lugar de la visualización numérica literal en pantalla. Se adapta a las especificaciones. Utiliza valores predeterminados para Ay I. En la primera entrada, use NULL para adivinar; de lo contrario, establecerá el número. PADSIZE DEBE SER 4! ¡Las células deben ser de 7 bits y envolver! Turing-complete! Salidas higher, lower, correct,you won , y you lost.

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

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

Aunque no son instrucciones muy amigables.

Magnus Holm
fuente
¡Muy agradable! Si solo tuvieras algo de aleatorización cuando AI es el jugador 2 ...
Eelvex
@Eelvex, golpeado por 30 caracteres.
zzzzBov
1

Sentí la necesidad de hacer justicia 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");}}

Ligeramente sin golf

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
fuente