Відгадайте кількість


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. Найкоротший виграш вступу.

Я не чітко читав, що нам потрібен ШІ на цьому. Чи можете ви підтвердити, що обидва гравці люди?
JB

@JB: шкода , що: / Ви дійсно потрібен AI. Я актуалізую це питання зараз ...
Eelvex

2
Я думаю, що тексти інструкцій для кожного кроку слід наводити, інакше відповіді важко порівняти.
Джої

@Joey Однозначно
Šimon Tóth

Чи важлива перевірка вводу користувача?
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) Безголів.
  • 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);
}

@Joey Виправлено зараз.
fR0DDY

добре, я не знаю повного C. Але ви можете, будь ласка, пояснити, як компілюється програма зі змінними без специфікатора типу?
MAKZ

Будь-яка змінна без вказаного типу є цілим числом
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

Стара добра рівнина С

#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
ти це писав у майбутньому? це дуже розумно !!
mikera

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

Мінімізований (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')}}

вибачте, я не помітив. Краще покладіть свій останній код зверху. (Крім того, я не можу змусити його працювати належним чином: - /)
Eelvex

@Eelvex: Хоча ти намагаєшся запустити це, моє рішення коротше, ніж прийняте. І вам слід дійсно вказати точні рядки, які слід використовувати під час взаємодії з користувачем. По суті, все, що Магнус робив - це використовувати більш стисну взаємодію, яка, звичайно, є коротшою.
Джої

Я бачу це правильно, і ця програма не обробляє випадок, коли людина є гравцем 1 правильно? Принаймні, я не бачу коду для AI, щоб відгадати число, а гравець ввести "вище", "нижче" або "правильно" де-небудь ...
Joey

@Joey, у мене склалося враження, що якби гравець людини першим пішов, їм доведеться лише вибрати номер. Я думаю, що я трохи туманний, чому гравець людини вибирає вищу, нижчу та правильну
zzzzBov

Просто дотримуйтесь вказівок гравців 1 і 2. Один з них - людина, інший - комп'ютер. Хоча різниці в протоколі немає. Крім того, пропозиція «комп'ютер повинен дійсно намагатися відгадати число, граючи як гравець два», дуже означає, що комп'ютер повинен відгадати число.
Джої

3

Python 2.7 334 335 327 314 300 Персонажі (Мій перший гольф)

(335) Забув вийти з нового рядка.

(327) Видалено надлишки 100 для рандінгу. Порівняння першого символу відповіді, а не цілого рядка.

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

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


Я усвідомлюю, що це стара відповідь, але я цього не знав тоді, і я просто натрапив на це - ви, ймовірно, можете використовувати короткі рядкові номери, наприклад, 1, 2, 3 і т.д., або просто припустити щось на зразок QBASIC / FreeBASIC і опустити їх повністю.
nyuszika7h

@ nyuszika7h Це скоріше конкурс популярності, ніж кодовий гольф, я б скоріше поїхав на більш типові номери на сто діапазонів.
JB

Це є? Ну, це позначено code-golf.
nyuszika7h

З конкретними та явними (і хитрими, ІМХО) умовами виграшу.
JB

О так, я це бачив, але забув.
nyuszika7h

2

Lua 360 символів

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!

2

Javascript

Це близько 800 символів і включає ваш основний бінарний вибір "AI" для половини комп'ютерного плеєра. Я, певно, міг би зберегти кілька символів, якби я позбувся всіх своїх vars, але мені не подобається протікання змінних навіть під час гольф-коду. Я також зробив два кроки "Це правильно?" / "Це вище?" Що стосується підтвердження спливаючих вікон, а не надання швидкого спливаючого вікна та перевірки на "правильність" / "вище" / "нижче", хоча це, можливо, також може зберегти деякі символи, я не дуже перевіряв.

Крім того, я тестував його лише на 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 року.
Joey

2

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

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

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

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

Не дуже дружні інструкції, хоча.


Дуже хороший! Якби у вас були якісь рандомізації, коли AI є гравцем 2 ...
Eelvex

@Eelvex, побили 30 символів.
zzzzBov

1

Я відчував необхідність зробити Яву певну справедливість. :)

Ява - 486 437 421 414

Гольф

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");
    }
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.