Adivinhe o número

10

Descrição

Crie um jogo "Adivinhe o número" totalmente funcional. O jogo é jogado por dois jogadores da seguinte maneira:

  1. O jogador um escolhe um número (A) entre 1 e N
  2. o jogador dois tenta adivinhar A escolhendo um número (B) no mesmo intervalo
  3. o primeiro jogador responde "mais alto" if A > B , "mais baixo" if A < B ou "correto" if A = B .
  4. as etapas 2-3 são repetidas vezes I ou até que "correto" seja respondido.
  5. Se "correto" for ouvido, o jogador dois ganha, caso contrário ele perde.

Especificações

Especificações mínimas para uma entrada válida:

  • O usuário pode jogar como jogador um ou jogador dois.
  • computador desempenha o outro papel.
  • o computador deve realmente tentar adivinhar o número enquanto joga como jogador dois (então, adivinhar os dados fornecidos ou ignorar os dados fornecidos é trapaça)
  • N = 100 ou entrada pelo usuário (sua escolha)
  • I = 5 ou entrada pelo usuário (sua escolha)
  • o programa deve anunciar o vencedor no final.
  • instruções completas, legíveis por humanos, do que fazer em cada etapa (por exemplo, "Jogue como jogador um ou jogador dois?" , "Insira outro palpite:" , etc) - não fique louco com esse; apenas mantenha-o simples.

Condições vencedoras

Naquela ordem:

  1. A entrada com o maior número de votos ganha se tiver pelo menos 3 votos à frente da segunda entrada com o maior número de votos.
  2. Menor entrada ganha.
Eelvex
fonte
Eu não li explicitamente que precisávamos de uma IA nela. Você poderia confirmar que os dois jogadores são humanos?
JB
@JB: desculpe sobre isso: / Você não precisa de um AI. Estou atualizando a pergunta agora ...
Eelvex 21/02
2
Eu acho que os textos de instruções para cada etapa devem ser dados, caso contrário, é difícil comparar as respostas.
Joey
@Joey Definitely
Šimon Tóth
A validação de entrada do usuário é importante?
precisa saber é o seguinte

Respostas:

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

História:

  • 2011-02-21 18:44 (620) Ungolfed.
  • 2011-02-21 19:15 (365) Primeira rodada de golfe.
  • 2011-02-21 19:31 (359) Alguns inlining.
  • 2011-02-21 19:38 (340) Algumas seqüências de caracteres encurtadas.
  • 2011-02-21 19:44 (339) whilefor
  • 2011-02-21 19:53 (331) Algumas seqüências de caracteres duplicadas são inseridas em variáveis.
  • 2011-02-21 19:53 (330) Outra variável embutida.
  • 2011-02-21 19:53 (328) Condição de loop otimizada. Não é possível usar um pipeline, no entanto.
  • 22-02-2011 01:57 (326) else{if...}elseif- salva o aparelho.
  • 2011-02-22 12:42 (325) Movia muitas coisas ao redor, usando uma hashtable em vez de switchpara evitar nomear o loop. Agora também posso usar apenas breakum pipeline. O anúncio do vencedor mudou-se para um filtro que usa, exitportanto, nenhuma interrupção é necessária.
  • 2011-02-23 01:23 (308) Em vez de uma elseifcadeia para verificar o palpite, eu apenas uso uma string de formato com valores diferentes para valores negativos, positivos e zero. Economiza muito.
  • 2011-02-23 02:16 (306) Usando subtração em vez de igualdade.
  • 12-03-2011 02:27 (289) Reduzido para o mesmo nível de interação rudimentar do usuário que a solução Ruby. Claro que é mais curto então.
Joey
fonte
9

TRS-80 BASIC, 249 caracteres

Acho que essa pode ser a primeira vez que enviei uma resposta a este site que escrevi antes de ele existir.

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 fato, eu o escrevi antes da existência da web mundial. Nos anos 80, assim como os TRS-80 estavam se tornando irrelevantes.

Este é um exemplo de "one-liner" - uma tentativa de ajustar o programa mais interessante que você poderia em uma única linha do BASIC. Foi a minha primeira vez e não foi tão impressionante. (Havia algumas frases surpreendentes flutuando por aí.)

Uma linha do TRS-80 BASIC era limitada a 255 caracteres, menos alguns por sobrecarga. Embora às vezes você possa exceder isso, já que o limite verdadeiro era de 255 bytes após a tokenização - mas o editor também truncaria uma linha com mais de 255 caracteres antes da tokenização, e você precisava usar truques no editor de linhas para inserir caracteres de controle literais como novas linhas em suas strings.

E sim, para esclarecer, essas quebras de linha na lista são caracteres literais de nova linha. (Para obtê-los em seu código, você precisava usar o Ccomando hange enquanto estava EDITna linha. É uma dor total, mas vale a pena substituir oito ou mais caracteres por +CHR$(13)um.)

Porra, eu jogo golfe há muito tempo.

caixa de pão
fonte
6

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

De uma forma mais legível.

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
fonte
@ Joey Corrected Now.
FR0DDY
bem, eu não sei C. completo. Mas você pode, por favor, explicar como um programa com variáveis ​​sem especificador de tipo é compilado?
MAKZ
Qualquer variável sem tipo especificado é um número inteiro
Ethiraric
4

C #:

Contagem de caracteres: Com espaços: 575 Sem espaços: 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 fazer enquanto agora é "Ir para" ( arrepio )

Yngve B-Nilsen
fonte
3

Boa velha planície 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 agradável e aconchegante
  • 24/11/2011 09:38:00 616 corrigido e reduzido
  • 24/11/2011 11:52:00 555 encurtado
Šimon Tóth
fonte
11
você escreveu isso no futuro? isso é muito inteligente !!
Mikera # 8/11
3

Javascript

Nova versão compactada ( chamadas eliminadas vare reduzidas 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 executar a chamada g(100);, a auto-execução não é contada, pois adiciona um número variável de caracteres (275 caracteres para g(100);).

original (algo em torno de 600 caracteres, incluindo espaço em branco):

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
fonte
desculpe, eu não percebi. Melhor colocar seu código mais recente no topo. (Além disso, eu não posso fazê-lo funcionar corretamente: - /)
Eelvex
@Eelvex: Enquanto você tenta fazer isso funcionar, minha solução é mais curta que a atualmente aceita novamente. E você realmente deve especificar as strings exatas a serem usadas ao interagir com o usuário. Basicamente, tudo o que Magnus fez foi usar uma interação mais concisa, o que obviamente é mais curto.
Joey
Estou vendo isso corretamente e este programa não lida com o caso em que o humano é o jogador 1 corretamente? Pelo menos eu não vejo código para o AI para adivinhar um número e o jogador para entrar »mais elevada«»reduzir«ou»correta« em qualquer lugar ...
Joey
@ Joey, fiquei com a impressão de que, se um jogador humano fosse o primeiro, teria apenas que escolher um número. Eu acho que eu sou um nevoeiro pouco sobre o porquê de um jogador humano seria a escolha superior, inferior e correta
zzzzBov
Basta seguir as instruções dos jogadores 1 e 2. Um deles é humano, o outro é um computador. Não há diferença no protocolo, no entanto. Além disso, a frase »computador deve realmente tentar adivinhar o número enquanto estiver jogando como jogador dois« implica muito que o computador precisa adivinhar um número.
Joey
3

Python 2.7 334 335 327 314 300 Caracteres (Minha primeira vez jogando golfe)

(335) Esqueceu-se de escapar da nova linha.

(327) Removido 100 redundante para randint. Comparação do primeiro caractere da resposta, em vez da sequência inteira.

(314) Impressão atualizada que ganhou.

(300) Alterado quando o jogador era jogador 1: alteração do número de adivinhações como computador

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

Aqui está a versão sem AI.

JB
fonte
Sei que essa é uma resposta antiga, mas não sabia disso naquela época e acabei de me deparar com isso - você provavelmente poderia usar números de linhas mais curtos, como 1, 2, 3, etc., ou apenas assumir algo como QBASIC / FreeBASIC e omita-os completamente.
precisa saber é o seguinte
@ nyuszika7h É mais um concurso de popularidade do que código de golfe, prefiro os números mais comuns de cem faixas.
JB
Isto é? Bem, está marcado code-golf.
precisa saber é o seguinte
Com condições vencedoras específicas e explícitas (e péssimas, IMHO).
JB
Ah, claro, eu vi isso, mas esqueci.
precisa saber é o seguinte
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")

Versão sem golfe:

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

Javascript

Isso tem cerca de 800 caracteres e inclui sua seleção binária básica 'AI' para a metade do player do computador. Provavelmente eu poderia salvar alguns caracteres se me livrasse de todos os meus vars, mas não gosto de vazar variáveis, mesmo durante o código de golfe. Também dei dois passos "Isso está correto?" / "Isso está mais alto?" coisa com confirmar pop-ups ao invés de dar um pop-up rápido e procurar "correto" / "maior" / "menor", embora isso possa também salvar alguns caracteres, eu realmente não verifiquei.

Além disso, eu o testei apenas no Firefox 4, por isso não sei se algumas das coisas que estou fazendo funcionam de maneira consistente, particularmente combinando uma entrada inválida, analisada como NaN, com um valor padrão em minha wpfunção.

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

Versão sem golfe:

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
fonte
Primeiro de tudo: isso nem compila, pois o Java não possui seqüências de várias linhas. Você não pode esperar quebrar linhas no meio de uma string e isso funcionará.
Joey
Ok, parei de tentar fazer com que parecesse bom na tela e colei a única linha.
21811 Joe Zitzelberger #
11
Além disso (economia entre parênteses): A classe pode ser nomeada com uma única letra (40). Há muito espaço em branco desnecessário lá (80). Você pode recolher declarações de várias variáveis ​​do mesmo tipo, por exemplo int a=5,b=10(34). Você pode nomear os argumentos no construtor diferentes dos campos para evitar this.(10). Você pode eliminar Lcompletamente, pois sempre permanece em 1(4). Você pode deixar de fora a inicialização He Gque é definida no construtor de qualquer maneira (6). Você pode usar nomes de uma letra para todas as variáveis ​​e métodos (235).
Joey
É verdade, mas isso seria totalmente ilegível. Este é o ponto em que vejo o código-golfe realmente se tornando o código-boliche. Mas se eu encontrar algum tempo, vou polir esta noite.
21811 Joe Zitzelberger #
11
Correção para a figura anterior: (272). Você pode reescrever fuzzifyusando o operador condicional (20). Você pode inserir o BufferedReaderin getInt(19). Você pode usar String#matchespara evitar o Patterne Matcherem getInt(48). Você também pode usar o operador condicional processGuess(30). Estou agora até 1360, em vez de sua inicial 1953.
Joey
2

Rádio-relógio, 5756 bits (2159 bytes)

Em breve em um despertador perto de você! As novas linhas são apenas para legibilidade. Os valores ASCII são usados ​​ocasionalmente no lugar da exibição numérica literal na tela. Se encaixa especificações. Usa padrões para Ae I. Na primeira entrada, use NULL para adivinhar, caso contrário, você definirá o número. O PADSIZE DEVE SER 4! As células devem ter 7 bits e envolver! Turing-completo! Saídas higher, lower, correct, you won, e you lost.

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

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

Instruções não muito amigáveis.

Magnus Holm
fonte
Muito agradável! Se você tivesse algum randomização quando AI é o jogador 2 ...
Eelvex
@Eelvex, derrotado por 30 caracteres.
zzzzBov
1

Senti a necessidade de fazer justiça a Java. :)

Java - 486 437 421 414

Golfe

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

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