Угадай число

10

Описание

Создайте полностью рабочую игру «Угадай число». В игру играют два игрока следующим образом:

  1. игрок один выбирает число (A) от 1 до N
  2. игрок два пытается угадать A, выбирая число (B) в том же диапазоне
  3. первый игрок отвечает «выше» if A > B , «ниже» if A < B или «правильно» if A = B .
  4. шаги 2-3 повторяются I раз или до тех пор, пока «правильный» ответ.
  5. Если слышен «правильный», игрок два выигрывает, в противном случае он проигрывает.

Спекуляции

Минимальные спецификации для действительной записи:

  • Пользователь может играть либо как первый игрок, либо как второй игрок.
  • компьютер играет другую роль.
  • компьютер должен действительно пытаться угадать число во время игры за второго игрока (таким образом, гадание на основе данных или игнорирование данных - это обман)
  • N = 100 или ввод пользователя (на ваш выбор)
  • I = 5 или ввод пользователя (на ваш выбор)
  • Программа должна объявить победителя в конце.
  • полные понятные человеку инструкции о том, что делать на каждом шаге (например, «Играть как игрок один или игрок два?» , «Введите другое предположение:» и т. д.) - не сходите с ума от этого; просто будь проще.

Условия выигрыша

В этой последовательности:

  1. Участник, получивший наибольшее количество голосов, выигрывает, если он опережает второе место с наибольшим количеством голосов по крайней мере на 3 голоса.
  2. Самый короткий вход побеждает.
Eelvex
источник
Я явно не читал, что нам нужен ИИ. Не могли бы вы подтвердить, что оба игрока люди?
JB
@JB: жаль , что: / Вы действительно нужен AI. Я обновляю вопрос сейчас ...
Eelvex
2
Я думаю, что тексты инструкций для каждого шага должны быть даны, иначе трудно сравнить ответы.
Джои
@Joey Определенно
Шимон Тот
Важна ли проверка ввода пользователя?
zzzzBov

Ответы:

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

История:

  • 2011-02-21 18:44 (620) Ungolfed.
  • 2011-02-21 19:15 (365) Первый раунд игры в гольф.
  • 2011-02-21 19:31 (359) Некоторые вставки.
  • 2011-02-21 19:38 (340) Некоторые строки сокращены.
  • 2011-02-21 19:44 (339) whilefor
  • 2011-02-21 19:53 (331) Некоторые повторяющиеся строки вытянуты в переменные.
  • 2011-02-21 19:53 (330) Введена еще одна переменная.
  • 2011-02-21 19:53 (328) Оптимизированное состояние петли. Однако не могу использовать конвейер.
  • 2011-02-22 01:57 (326) else{if...}elseif- сохраняет скобки.
  • 2011-02-22 12:42 (325) Переместил много вещей вокруг, используя хеш-таблицу вместо, switchчтобы избежать именования цикла. Теперь я могу использовать как раз breakи конвейер тоже. Объявление победителя переместилось в фильтр, который использует, exitтак что перерыв не требуется, никогда.
  • 2011-02-23 01:23 (308) Вместо elseifцепочки для проверки предположения я просто использую строку формата с различными значениями для отрицательных, положительных и нулевых значений. Экономит много
  • 2011-02-23 02:16 (306) Использование вычитания вместо равенства.
  • 2011-03-12 02:27 (289) Приведено к тому же уровню элементарного взаимодействия с пользователем, что и решение Ruby. Конечно, это короче.
детеныш
источник
9

TRS-80 BASIC, 249 знаков

Я думаю, что это может быть первый раз, когда я отправляю ответ на этот сайт, который я написал до того, как сайт появился.

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

На самом деле, я написал это до того, как появилась всемирная сеть. Еще в 1980-х годах, когда TRS-80 стали неактуальными.

Это пример «однострочного» - попытка поместить самую интересную программу, которую вы могли бы в одну строку BASIC. Это был мой первый однострочник, и не очень впечатляющий. (Там было несколько удивительных однострочников.)

Линия TRS-80 BASIC была ограничена 255 символами, минус пара для накладных расходов. Хотя иногда это может превышать это значение, поскольку истинный предел составлял 255 байт после токенизации, но редактор также обрезал строку, содержащую более 255 символов, до токенизации, и вам нужно было использовать приемы в редакторе строк для вставки буквенных управляющих символов. как переводы строк в твои строки.

И да, чтобы уточнить, эти разрывы строк в списке являются буквальными символами новой строки. (Чтобы получить их в своем коде, вам нужно было использовать команду Change при EDITвводе строки. Полная боль, но стоит заменить восемь или более символов на +CHR$(13)один.)

Блин, я давно играю в гольф.

Хлебница
источник
6

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

В более читаемой форме.

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
источник
@ Джои Исправлено.
fR0DDY
ну, я не знаю, полный C. Но не могли бы вы объяснить, как компилируется программа с переменными без спецификатора типа?
МАКЗ
Любая переменная без указанного типа является целым числом
Ethiraric
4

C #:

Количество символов: С пробелами: 575 Без пробелов: 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);
    }

Отредактируйте , пока время "Goto" ( дрожь )

Ингве Б-Нильсен
источник
3

Старая добрая равнина 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 красиво и уютно
  • 24/11/2011 09:38:00 616 исправлено и укорочено
  • 24/11/2011 11:52:00 555 сокращено
Шимон Тот
источник
1
ты написал это в будущем? это очень умно !!
Микера
3

JavaScript

Новая минимизированная версия (пропущенные varи сокращенные alertвызовы:

268 символов

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

Для выполнения вызова g(100);самостоятельное выполнение не учитывается, так как оно добавляет переменное количество символов (275 символов для g(100);).

оригинал (где-то около 600 символов, включая пробелы):

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

Minified (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
источник
извини, я не заметил Лучше поместите ваш последний код сверху. (Кроме того, я не могу заставить его работать должным образом: - /)
Eelvex
@Eelvex: Пока вы пытаетесь заставить это работать, мое решение короче, чем принятое в настоящее время снова. И вы действительно должны указать точные строки, которые будут использоваться при взаимодействии с пользователем. В основном все, что делал Магнус, - это использовать более лаконичное взаимодействие, которое, конечно, короче.
Джои
Я правильно понимаю, и эта программа не справляется со случаем, когда человек является игроком 1 правильно? По крайней мере, я не вижу кода для AI, чтобы угадать число, и игрок должен ввести «выше», «ниже» или «исправить» где угодно ...
Joey
@ Джои, у меня сложилось впечатление, что если бы игрок-человек пошел первым, ему нужно было просто выбрать номер. Я полагаю, я немного туманно понимаю, почему игрок-человек выбрал бы более высокое, более низкое и правильное
zzzzBov
Просто следуйте инструкциям для игроков 1 и 2. Один из них - человек, другой - компьютер. Там нет никакой разницы в протоколе, хотя. Кроме того, предложение «компьютер должен действительно пытаться угадать число, играя за второго игрока», очень подразумевает, что компьютер должен угадать число.
Джои
3

Python 2.7 334 335 327 314 300 знаков (мой первый раз в гольф)

(335) Забыл сбежать с новой строки.

(327) Удалены лишние 100 для randint. Сравнение первого символа ответа, а не всей строки.

(314) Обновлена ​​печать, кто победил.

(300) Изменено, когда игрок был игроком 1: изменено угадывание числа как компьютера

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
источник
2

Бейсик, 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"

Вот версия без AI.

JB
источник
Я понимаю, что это старый ответ, но я не знал этого тогда, и я просто наткнулся на это - вы могли бы использовать более короткие номера строк, такие как 1, 2, 3 и т. Д., Или просто предположить что-то вроде QBASIC / FreeBASIC и опустить их полностью.
nyuszika7h
@ nyuszika7h Это скорее соревнование популярности, чем игра в гольф, я бы предпочел более типичные сто-диапазонные числа.
JB
Это? Ну, это помечено code-golf.
nyuszika7h
С конкретными и явными (и паршивыми, ИМХО) условиями выигрыша.
JB
Ах да, я видел это, но забыл это.
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")

Версия без гольфа:

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
источник
2

Javascript

Это около 800 символов и включает ваш основной двоичный выбор «AI» для половины компьютерного игрока. Я мог бы, вероятно, сохранить несколько символов, если бы избавился от всех своих, varно я не люблю пропускать переменные даже во время игры в гольф. Я также сделал два шага «Это правильно?» / «Это выше?» вещь с всплывающими окнами подтверждения, вместо того, чтобы давать всплывающее окно с подсказками и проверять «правильно» / «выше» / «ниже», хотя это может также сохранить некоторые символы, я не проверял.

Кроме того, я протестировал его только в Firefox 4, так что я не знаю, работают ли некоторые из вещей, которые я делаю последовательно, в частности, объединение неверного ввода, проанализированного как NaN, со значением по умолчанию в моей wpфункции.

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

Ява, 1886 символов

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

Версия без гольфа:

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;
    }
}
Джо Зицельбергер
источник
Прежде всего: это даже не компилируется, поскольку в Java нет многострочных строк. Вы не можете ожидать разбить строки в середине строки, и это сработает.
Джои
Хорошо, я перестал пытаться заставить его хорошо выглядеть на экране и просто вставил одну строку.
Джо Зицельбергер
1
Кроме того (экономия в скобках): класс можно назвать одной буквой (40). Там много лишних пробелов (80). Вы можете свернуть объявления нескольких переменных одного типа, например int a=5,b=10(34). Вы можете назвать аргументы в конструкторе отличными от полей, чтобы избежать this.(10). Вы можете Lполностью исключить , так как он всегда остается в 1(4). Вы можете не указывать инициализацию Hи Gкоторые в любом случае устанавливаются в конструкторе (6). Вы можете использовать однобуквенные имена для всех переменных и методов (235).
Джои
Правда, но это было бы совершенно нечитаемо. Это та точка, где я вижу, что код-гольф действительно превращается в боулинг. Но если я найду время, я отполирую его сегодня вечером.
Джо Зицельбергер
1
Исправление к предыдущему рисунку: (272). Вы можете переписать, fuzzifyиспользуя условный оператор (20). Вы можете встроить BufferedReaderв getInt(19). Вы можете использовать, String#matchesчтобы избежать Patternи Matcherв getInt(48). Вы также можете использовать условный оператор в processGuess(30). Сейчас у меня 1360 вместо вашего начального 1953 года.
Джои
2

Радио-будильник, 5756 бит (2159 байт)

Скоро к будильнику рядом с вами! Новые строки предназначены только для чтения. Значения ASCII иногда используются вместо буквенно-цифрового отображения на экране. Подходит спецификации Использует значения по умолчанию для Aи I. На первом входе используйте NULL, чтобы быть угадывающим, иначе вы установите число. ПАДЖИЗ ДОЛЖЕН БЫТЬ 4! Клетки должны быть 7-битными и обернуть! Тьюринг! Выходы higher, lower, correct, you won, и you lost.

}+>,[,>>+++++++[>>>>>>>+++++++>+++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++]>>>>>>>++++++.>>>>>>>++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++[+++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++>+++>>>>>>>]>++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++.++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.++++++.++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++[++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++>+>>>>>>>]>+++.+++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++[
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++>++++>>>>>>>]>+++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++.+++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++.[+]+][++++[+++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++>,[+[+++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++>++>>>>>>>]>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.+++.++++++++.[+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++>+++>>>>>>>]>.+++++++++++++.[+
]+][++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++[++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++>+>>>>>>>]>++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
++++++++++++.+++..++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++.++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++.+++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++[+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++>+>>>>>>>]>+++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++.>>>>>>>[+]>>>>>>>+++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++]]][>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++[++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++>+++>>>>>>>]>+++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++.+++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.++++++.+++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++[+++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++>+>>>>>>>]>+++.++[+++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+
+>>>>>>>]>.+++.++++.+.>>>>>>>[+]+][+++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++[++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++>+++>>>>>>>]>+++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++.+++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
++++++.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++[+++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++>+>>>>>>>]>+++.++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++[+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++>>>>>>>]>++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++.++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.]
Timtech
источник
1

Рубин 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!"

Не очень дружелюбные инструкции, хотя.

Магнус Холм
источник
Очень хорошо! Если бы у вас была некоторая рандомизация, когда ИИ является игроком 2 ...
Eelvex
@Eelvex, побитый на 30 символов.
zzzzBov
1

Я чувствовал необходимость сделать 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");}}

Слегка безжалостный

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
источник