Odgadnij numer


10

Opis

Utwórz w pełni działającą grę „Zgadnij liczbę”. W grze bierze udział dwóch graczy:

  1. gracz jeden wybiera liczbę (A) między 1 a N
  2. gracz drugi próbuje zgadnąć A wybierając liczbę (B) z tego samego zakresu
  3. pierwszy gracz odpowiada „wyżej” if A > B , „niżej” if A < B lub „poprawnie” if A = B .
  4. kroki 2-3 są powtarzane I razy lub do momentu odpowiedzi „poprawne”.
  5. Jeśli usłyszysz „prawidłowe”, gracz dwa wygrywa, w przeciwnym razie przegrywa.

Okular

Minimalne specyfikacje dla prawidłowego wpisu:

  • użytkownik może grać jako gracz jeden lub gracz drugi.
  • komputer odgrywa drugą rolę.
  • komputer musi naprawdę zgadnąć numer podczas gry jako gracz drugi (zgadywanie na podstawie danych lub ignorowanie danych jest oszustwem)
  • N = 100 lub dane wprowadzone przez użytkownika (do wyboru)
  • I = 5 lub dane wprowadzone przez użytkownika (twój wybór)
  • program musi ogłosić zwycięzcę na końcu.
  • pełne instrukcje czytelne dla człowieka, co robić na każdym etapie (np. „Graj jako gracz jeden lub gracz drugi?” , „Podaj inną odpowiedź:” itd.) - nie zwariuj na tym punkcie ; po prostu to proste.

Warunki wygranej

W tej kolejności:

  1. Wpis o najwyższej liczbie głosów wygrywa, jeśli uzyska co najmniej 3 głosy przed drugim w kolejności numerem w głosowaniu.
  2. Zwycięża najkrótsza pozycja.

Nie czytałem wyraźnie, że potrzebujemy AI na tym. Czy możesz potwierdzić, że obaj gracze są ludźmi?
JB

@JB: przepraszam: / Ty nie potrzebujesz AI. Aktualizuję pytanie teraz ...
Eelvex

2
Myślę, że należy podać teksty instrukcji dla każdego kroku, w przeciwnym razie trudno będzie porównać odpowiedzi.
Joey,

@Jeey Zdecydowanie
Šimon Tóth,

Czy sprawdzanie poprawności przez użytkownika jest ważne?
zzzzBov

Odpowiedzi:


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:

  • 21.02.2011, 18:44 (620) Ungolfed.
  • 2011-02-21 19:15 (365) Pierwsza runda golfa.
  • 2011-02-21 19:31 (359) Niektóre inlining.
  • 2011-02-21 19:38 (340) Niektóre łańcuchy uległy skróceniu.
  • 21.02.2011, 19:44 (339) whilefor
  • 2011-02-21 19:53 (331) Niektóre zduplikowane ciągi ciągnięte do zmiennych.
  • 2011-02-21 19:53 (330) Inna zmienna wstawiona.
  • 2011-02-21 19:53 (328) Zoptymalizowany stan pętli. Nie można jednak użyć potoku.
  • 2011-02-22 01:57 (326) else{if...}elseif- zapisuje nawiasy klamrowe.
  • 2011-02-22 12:42 (325) Przeniesiono wiele rzeczy, używając tablicy haszującej zamiast, switchaby uniknąć nazywania pętli. Teraz mogę też użyć just breaki pipeline. Ogłoszenie zwycięzcy zostało przeniesione do używanego filtraexit więc nigdy nie jest wymagana przerwa.
  • 2011-02-23 01:23 (308) Zamiast elseifłańcucha do sprawdzania zgadywania po prostu używam łańcucha formatu o różnych wartościach dla wartości ujemnych, dodatnich i zerowych. Dużo oszczędza.
  • 2011-02-23 02:16 (306) Używanie odejmowania zamiast równości.
  • 2011-03-12 02:27 (289) Zredukowano do tego samego poziomu podstawowej interakcji użytkownika, co rozwiązanie Ruby. Oczywiście to jest krótsze.

9

TRS-80 BASIC, 249 znaków

Myślę, że może to być pierwszy raz, kiedy przesłałem odpowiedź na tę stronę, którą napisałem przed jej istnieniem.

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

W rzeczywistości napisałem to zanim istniała ogólnoświatowa sieć. W latach 80., gdy TRS-80 stały się nieistotne.

To jest przykład „jednej linijki” - próby dopasowania najciekawszego programu, jaki można zastosować do jednej linii języka BASIC. To był mój pierwszy jednoliniowy i niezbyt imponujący. (Było tam kilka niesamowitych jedno-liniowców.)

Linia TRS-80 BASIC była ograniczona do 255 znaków, minus kilka narzutów. Chociaż czasem można to było przekroczyć, ponieważ prawdziwy limit wynosił 255 bajtów po tokenizacji - ale edytor obcinałby również linię, która miała ponad 255 znaków przed tokenizacją, i trzeba było używać sztuczek w edytorze linii, aby wstawić dosłowne znaki sterujące jak nowe linie w swoich ciągach.

I tak, aby wyjaśnić, te podziały wiersza na liście są dosłownie znakami nowej linii. (Aby umieścić je w kodzie, trzeba było użyć Cpolecenia hange podczas EDITwstawiania wiersza. Całkowity ból, ale warto zastąpić osiem lub więcej znaków +CHR$(13)jednym).

Cholera, grałem w golfa od dłuższego czasu.


6

C 397 Znaków

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

W bardziej czytelnej formie.

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 poprawiony teraz.
fR0DDY

cóż, nie wiem kompletny C. Ale czy możesz wyjaśnić, w jaki sposób kompiluje się program ze zmiennymi bez specyfikatora typu?
MAKZ

Każda zmienna bez określonego typu jest liczbą całkowitą
Ethiraric

4

DO#:

Liczba znaków: ze spacjami: 575 Bez spacji: 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);
    }

Edycja do while jest teraz „Goto” ( dreszcz )


3

Dobra stara zwykła 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 miło i przytulnie
  • 24/11/2011 09:38:00 616 naprawione i skrócone
  • 24/11/2011 11:52:00 555 skrócone

1
napisałeś to w przyszłości? to bardzo sprytne !!
mikera

3

JavaScript

Nowa zminimalizowana wersja (odrzucone vari zredukowane alertpołączenia:

268 znaków

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

Aby uruchomić wywołanie g(100);, samodzielne wykonanie nie jest liczone, ponieważ dodaje zmienną liczbę znaków (275 znaków g(100);).

oryginał (około 600 znaków, w tym białe znaki):

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

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

przepraszam, nie zauważyłem. Lepiej umieść swój najnowszy kod na górze. (Poza tym nie mogę go poprawnie uruchomić: - /)
Eelvex

@Eelvex: Podczas gdy próbujesz uruchomić to, moje rozwiązanie jest krótsze niż obecnie akceptowane. I naprawdę powinieneś dokładnie określić ciągi znaków, które będą używane podczas interakcji z użytkownikiem. Zasadniczo wszystko, co zrobił Magnus, polegało na zastosowaniu bardziej zwięzłej interakcji, która oczywiście jest krótsza.
Joey,

Czy widzę to poprawnie i ten program nie obsługuje przypadku, w którym człowiek jest graczem 1 poprawnie? Przynajmniej nie widzę kodu dla AI, aby odgadnąć liczbę, a gracz wpisuje „wyżej”, „niżej” lub „poprawnie” gdziekolwiek ...
Joey

@Joey, miałem wrażenie, że jeśli ludzki gracz miałby pójść pierwszy, musiałby tylko wybrać numer. Chyba jestem trochę mglisty, dlaczego gracz wybiera ludzki byłby wyższy, niższy, a prawidłowa
zzzzBov

Postępuj zgodnie z instrukcjami dla graczy 1 i 2. Jeden z nich to człowiek, drugi to komputer. Nie ma jednak różnicy w protokole. Również zdanie »komputer musi naprawdę odgadnąć liczbę podczas gry jako gracz drugi« bardzo sugeruje, że komputer musi odgadnąć liczbę.
Joey,

3

Python 2,7 334 335 327 314 300 znaków (mój pierwszy golf)

(335) Zapomniałem uciec od nowej linii.

(327) Usunięto zbędne 100 dla randinta. Porównanie pierwszego znaku odpowiedzi zamiast całego łańcucha.

(314) Zaktualizowano drukowanie, który wygrał.

(300) Zmieniono, gdy gracz był graczem 1: zmieniono zgadywanie numeru jako komputera

from random import*
i=input
s="Enter number:"
p=i("Player 1/2:")-1
h=100
N=(i(s),randint(1,h))[p]
b=l=0
for _ in[0]*5:
 exec("g=(h+l)/2;r=raw_input('Guessing '+`g`+':')[0];exec('h=g','l=g')[r=='l'];b=r=='c'","g=i(s);b=g==N;print(('higher','lower')[N<g],'correct')[b]")[p]
 if b:break
print 1+b,"won"

2

BASIC, 184

100 INPUT "P1 NUMBER? ";
200 FOR I%=1 TO 5
300 INPUT "P2 GUESS? ";G%
400 INPUT "P1 SENTENCE? ";S$
500 IF S$="CORRECT" THEN 800
600 NEXT I%
700 PRINT "WINNER 1":END
800 PRINT "WINNER 2"

Oto wersja bez AI.


Zdaję sobie sprawę, że to stara odpowiedź, ale wtedy tego nie znałem i natknąłem się na to - prawdopodobnie możesz użyć krótszych numerów linii, takich jak 1, 2, 3 itd., Lub po prostu założyć coś takiego jak QBASIC / FreeBASIC i całkowicie je pomiń.
nyuszika7h

@ nyuszika7h To bardziej konkurs popularności niż kod golfowy, wolałbym raczej typowe liczby o stu zakresach.
JB

To jest? Cóż, jest oznaczony code-golf.
nyuszika7h

Z konkretnymi i wyraźnymi (i kiepskimi, IMHO) warunkami wygranej.
JB

No tak, widziałem to, ale zapomniałem.
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")

Wersja bez gry w golfa:

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

Ma około 800 znaków i obejmuje podstawowy wybór binarny „AI” dla połowy gracza komputerowego. Prawdopodobnie mógłbym uratować kilka postaci, gdybym pozbył się wszystkichvar ale nie lubię przeciekać zmiennych, nawet podczas gry w golfa. Zrobiłem również dwa kroki: „Czy to jest poprawne?” / „Czy to jest wyższe?” rzecz z potwierdzaniem wyskakujących okienek zamiast dawania szybkiego wyskakującego okienka i sprawdzania „poprawnego” / „wyższego” / „niższego”, chociaż może to również uratować niektóre znaki, tak naprawdę nie sprawdzałem.

Testowałem go tylko w Firefoksie 4, więc nie wiem, czy niektóre rzeczy, które robię, działają konsekwentnie, w szczególności łącząc nieprawidłowe wejście, parsowane jako NaN, do wartości domyślnej w mojej wpfunkcji.

function game(N, I) {
    var wa=function(a){window.alert(a)};
    var wc=function(s){return window.confirm(s)};
    var wp=function(s){return window.prompt(s)};
    var ri=function(s,d){return parseInt(wp(s),10)||d};
    var m=function(l,h){return Math.round((h+l)/2)};
    N = N || pd("Highest possible number?",100);
    I = I || pd("How many guesses?",5);
    var p = wc("Be player 2?");
    var s = [1,N];
    var a = p?Math.ceil(Math.random()*N):Math.min(N,Math.max(1,ri("Pick a number from 1 to " + N,1)));
    var w = 0;
    var g = 0;
    if(p) while(I--){while(!(g = ri("Guess:",0)));if(g==a){wa("correct");w=p+1;break;}else{wa(g<a?"higher":"lower")}}
    else while(I--){g = m(s[0],s[1]);if(wc("Is "+g+" correct?")) { w=p+1;break;} else if (wc("Is "+g+" higher?")){s=[s[0],g];}else{s=[g,s[1]];}}
    if(!w)w=!p+1;
    wa("Player " + w + " wins!");
}
game(100,5);

2

Java, 1886 znaków

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

Wersja bez gry w golfa:

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

Po pierwsze: To się nawet nie kompiluje, ponieważ Java nie ma ciągów wieloliniowych. Nie możesz oczekiwać, że przerwiesz linie w środku łańcucha i to zadziała.
Joey,

Ok, przestałem próbować wyglądać dobrze na ekranie i wkleiłem tylko jedną linię.
Joe Zitzelberger

1
Ponadto (oszczędności w nawiasach): klasę można nazwać pojedynczą literą (40). Jest tam mnóstwo niepotrzebnych białych znaków (80). Możesz zwinąć deklaracje wielu zmiennych tego samego typu, np. int a=5,b=10(34). Możesz nazwać argumenty w konstruktorze innym niż pola, których należy unikać this.(10). Możesz Lcałkowicie wyeliminować, ponieważ zawsze pozostaje na 1(4). Możesz zrezygnować z inicjowania Hi Gktóre i tak zostaną ustawione w konstruktorze (6). Możesz używać nazw jednoliterowych dla wszystkich zmiennych i metod (235).
Joey,

To prawda, ale byłoby to całkowicie nieczytelne. W tym momencie widzę, że golf-golf naprawdę stał się kręgielnią. Ale jeśli znajdę trochę czasu, wypoleruję to dziś wieczorem.
Joe Zitzelberger

1
Korekta do poprzedniego rysunku: (272). Możesz przepisać fuzzifyza pomocą operatora warunkowego (20). Możesz wstawić BufferedReaderin getInt(19). Możesz użyć, String#matchesaby uniknąć Patterni Matcherw getInt(48). Możesz również użyć operatora warunkowego w processGuess(30). Jestem teraz w dół do 1360 zamiast twojego początkowego 1953.
Joey

2

Radio z budzikiem, 5756 bitów (2159 bajtów)

Już wkrótce w pobliżu budzik! Nowe linie służą wyłącznie do odczytu. Wartości ASCII są czasami używane zamiast dosłownego wyświetlacza numerycznego na ekranie. Pasuje do specyfikacji. Używa wartości domyślnych dla Ai I. Przy pierwszym wprowadzeniu użyj wartości NULL, aby zgadnąć, w przeciwnym razie ustawisz liczbę. PADSIZE MUSI BYĆ 4! KOMÓRKI MUSZĄ BYĆ 7-BITOWE I ZWIJANE! Turing-kompletny! Wyjścia higher, lower, correct, you won, i you lost.

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

1

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

Jednak niezbyt przyjazne instrukcje.


Bardzo dobrze! Gdybyś tylko miał trochę
losowości,

@Eelvex, pobity przez 30 znaków.
zzzzBov

1

Czułem potrzebę oddania Java trochę sprawiedliwości. :)

Java - 486 437 421 414

Grał w golfa

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

Nieznacznie niepoddany golfowi

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");
    }
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.