Errate die Nummer


10

Beschreibung

Erstellen Sie ein voll funktionsfähiges "Errate die Zahl" -Spiel. Das Spiel wird von zwei Spielern wie folgt gespielt:

  1. Spieler eins wählt eine Zahl (A) zwischen 1 und N.
  2. Spieler zwei versucht zu erraten, dass A eine Zahl (B) im gleichen Bereich auswählt
  3. Der erste Spieler antwortet "höher" if A > B , "niedriger" if A < B oder "richtig" if A = B .
  4. Die Schritte 2-3 werden I- mal wiederholt oder bis "richtig" geantwortet wird.
  5. Wenn "richtig" zu hören ist, gewinnt Spieler zwei, andernfalls verliert er.

Technische Daten

Mindestanforderungen für einen gültigen Eintrag:

  • Benutzer kann entweder als Spieler eins oder als Spieler zwei spielen.
  • Computer spielt die andere Rolle.
  • Der Computer muss wirklich versuchen, die Zahl zu erraten, während er als Spieler zwei spielt (also ist es ein Betrug, gegen die angegebenen Daten zu raten oder die angegebenen Daten zu ignorieren).
  • N = 100 oder Eingabe durch den Benutzer (Ihre Wahl)
  • I = 5 oder Eingabe durch den Benutzer (Ihre Wahl)
  • Programm muss dann Gewinner am Ende bekannt geben.
  • vollständige, von Menschen lesbare Anweisungen, was in jedem Schritt zu tun ist (z. B. "Als Spieler eins oder Spieler zwei spielen?" , "Geben Sie eine andere Vermutung ein:" usw.) - machen Sie sich in diesem Schritt nicht verrückt; halte es einfach.

Gewinnbedingungen

In dieser Reihenfolge:

  1. Der Beitrag mit der höchsten Stimme gewinnt, wenn er mindestens 3 Stimmen vor dem Beitrag mit der zweithöchsten Stimme liegt.
  2. Der kürzeste Eintrag gewinnt.

Ich habe nicht explizit gelesen, dass wir dafür eine KI brauchen. Könnten Sie bestätigen, dass beide Spieler Menschen sind?
JB

@JB: tut mir leid , dass: / Sie haben eine KI benötigen. Ich aktualisiere die Frage jetzt ...
Eelvex

2
Ich denke, die Anweisungstexte für jeden Schritt sollten angegeben werden, sonst ist es schwierig, die Antworten zu vergleichen.
Joey

@ Joey Definitiv
Let_Me_Be

Ist die Validierung von Benutzereingaben wichtig?
zzzzBov

Antworten:


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

Geschichte:

  • 2011-02-21 18:44 (620) Ungolfed.
  • 2011-02-21 19:15 (365) Erste Golfrunde.
  • 2011-02-21 19:31 (359) Einige Inlining.
  • 2011-02-21 19:38 (340) Einige Saiten wurden verkürzt.
  • 2011-02-21 19:44 (339) whilefor
  • 2011-02-21 19:53 (331) Einige doppelte Zeichenfolgen werden in Variablen gezogen.
  • 2011-02-21 19:53 (330) Eine weitere Variable inline.
  • 2011-02-21 19:53 (328) Optimierter Schleifenzustand. Ich kann jedoch keine Pipeline verwenden.
  • 2011-02-22 01:57 (326) else{if...}elseif- speichert die Klammern.
  • 2011-02-22 12:42 (325) Es wurden viele Dinge verschoben, wobei anstelle der Hashtabelle eine Hashtabelle verwendet wurde switch, um die Benennung der Schleife zu vermeiden. Jetzt kann ich auch nur breakeine Pipeline verwenden. Die Bekanntgabe des Gewinners wurde in einen Filter verschoben, der verwendet, exitsodass niemals eine Unterbrechung erforderlich ist.
  • 2011-02-23 01:23 (308) Anstelle einer elseifKette zum Überprüfen der Vermutung verwende ich nur eine Formatzeichenfolge mit unterschiedlichen Werten für negative, positive und Nullwerte. Spart viel.
  • 2011-02-23 02:16 (306) Subtraktion anstelle von Gleichheit verwenden.
  • 2011-03-12 02:27 (289) Auf das gleiche Maß an rudimentärer Benutzerinteraktion wie bei der Ruby-Lösung reduziert. Natürlich ist es dann kürzer.

9

TRS-80 BASIC, 249 Zeichen

Ich denke, dies ist möglicherweise das erste Mal, dass ich eine Antwort auf diese Site eingereicht habe, die ich geschrieben habe, bevor die Site existiert hat.

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

Tatsächlich habe ich es geschrieben, bevor das World Wide Web existierte. In den 1980er Jahren, als TRS-80s irrelevant wurden.

Dies ist ein Beispiel für einen "Einzeiler" - ein Versuch, das interessanteste Programm, das Sie könnten, in eine einzelne Zeile von BASIC zu integrieren. Es war mein erster Einzeiler und nicht besonders beeindruckend. (Da draußen schwebten einige erstaunliche Einzeiler herum.)

Eine Zeile TRS-80 BASIC war auf 255 Zeichen begrenzt, abzüglich eines Paares für Overhead. Obwohl Sie dies manchmal überschreiten konnten, da das wahre Limit nach der Tokenisierung 255 Byte betrug, schnitt der Editor auch eine Zeile mit mehr als 255 Zeichen vor der Tokenisierung ab, und Sie mussten Tricks im Zeileneditor verwenden, um Literalsteuerzeichen einzufügen wie Zeilenumbrüche in Ihre Saiten.

Und ja, zur Verdeutlichung sind diese Zeilenumbrüche in der Liste wörtliche Zeilenumbrüche. (Um sie in Ihren Code aufzunehmen, mussten Sie den CBefehl hange verwenden, während EDITSie in der Zeile stehen. Ein totaler Schmerz, aber es lohnt sich, acht oder mehr Zeichen durch +CHR$(13)eins zu ersetzen .)

Verdammt, ich habe lange Golf gespielt.


6

C 397 Zeichen

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

In einer besser lesbaren Form.

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 jetzt korrigiert.
FR0DDY

Nun, ich weiß nicht vollständig C. Aber können Sie bitte erklären, wie ein Programm mit Variablen ohne Typspezifizierer kompiliert wird?
MAKZ

Jede Variable ohne angegebenen Typ ist eine Ganzzahl
Ethiraric

4

C #:

Zeichenanzahl: Mit Leerzeichen: 575 Keine Leerzeichen: 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);
    }

Edit do while ist jetzt "Goto" ( Schauer )


3

Gute alte Ebene 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 schön und gemütlich
  • 24/11/2011 09:38:00 616 behoben & verkürzt
  • 24/11/2011 11.52.00 555 verkürzt

1
Hast du das in Zukunft geschrieben? das ist sehr klug !!
Mikera

3

JavaScript

Neue minimierte Version (abgebrochene varund reduzierte alertAnrufe:

268 Zeichen

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

Um einen Anruf auszuführen g(100);, wird die Selbstausführung nicht gezählt, da eine variable Anzahl von Zeichen hinzugefügt wird (275 Zeichen für g(100);).

Original (ungefähr 600 Zeichen einschließlich Leerzeichen):

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

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

Entschuldigung, ich habe es nicht bemerkt. Setzen Sie Ihren neuesten Code besser oben ein. (Außerdem kann ich es nicht richtig zum Laufen bringen: - /)
Eelvex

@Eelvex: Während Sie versuchen, dies zum Laufen zu bringen, ist meine Lösung kürzer als die derzeit wieder akzeptierte. Und Sie sollten wirklich die genauen Zeichenfolgen angeben, die bei der Interaktion mit dem Benutzer verwendet werden sollen. Grundsätzlich hat Magnus nur eine präzisere Interaktion verwendet, die natürlich kürzer ist.
Joey

Sehe ich das richtig und dieses Programm behandelt den Fall, in dem der Mensch Spieler 1 ist, nicht richtig? Zumindest sehe ich keinen Code, mit dem die KI eine Zahl erraten und der Spieler irgendwo »höher«, »niedriger« oder »richtig« eingeben kann ...
Joey

@Joey, ich hatte den Eindruck, dass ein menschlicher Spieler, wenn er zuerst gehen würde, nur eine Nummer auswählen müsste. Ich denke, ich bin ein bisschen neblig, warum ein menschlicher Spieler höher, niedriger und richtig wählen würde
zzzzBov

Folgen Sie einfach den Anweisungen für Spieler 1 und 2. Einer von ihnen ist ein Mensch, der andere ist ein Computer. Es gibt jedoch keinen Unterschied im Protokoll. Auch der Satz »Computer muss wirklich versuchen, die Zahl zu erraten, während er als Spieler zwei spielt« impliziert sehr stark, dass der Computer eine Zahl erraten muss.
Joey

3

Python 2.7 334 335 327 314 300 Zeichen (Mein erstes Mal Golf spielen)

(335) Ich habe vergessen, der Newline zu entkommen.

(327) Redundante 100 für Randint entfernt. Vergleich des ersten Antwortzeichens anstelle der gesamten Zeichenfolge.

(314) Aktualisierter Druck, wer gewonnen hat.

(300) Geändert, als Spieler Spieler 1 war: Das Erraten der Nummer als Computer wurde geändert

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"

Hier ist die No-AI-Version.


Mir ist klar, dass dies eine alte Antwort ist, aber ich wusste das damals noch nicht und bin nur darauf gestoßen - Sie könnten wahrscheinlich kürzere Zeilennummern wie 1, 2, 3 usw. verwenden oder einfach etwas wie QBASIC / FreeBASIC und annehmen lass sie komplett weg.
Nyuszika7h

@ nyuszika7h Es ist eher ein Beliebtheitswettbewerb als Code-Golf. Ich würde mich lieber für die typischeren Zahlen mit hundert Reichweiten entscheiden.
JB

Es ist? Nun, es ist markiert code-golf.
Nyuszika7h

Mit spezifischen und expliziten (und miesen, IMHO) Gewinnbedingungen.
JB

Oh, richtig, das habe ich gesehen, aber vergessen.
Nyuszika7h

2

Lua 360 Zeichen

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

Nicht-Golf-Version:

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

Dies sind ungefähr 800 Zeichen und beinhaltet Ihre grundlegende binäre Auswahl 'KI' für die Hälfte des Computerspielers. Ich könnte wahrscheinlich ein paar Zeichen speichern, wenn ich alle meine vars loswerden würde, aber ich mag es nicht, Variablen zu verlieren, selbst wenn ich Code spiele. Ich habe auch zwei Schritte gemacht: "Ist das richtig?" / "Ist das höher?" Eine Sache mit Popups bestätigen, anstatt ein sofortiges Popup zu geben und nach "richtig" / "höher" / "niedriger" zu suchen, obwohl das vielleicht auch einige Zeichen speichern könnte, habe ich nicht wirklich überprüft.

Außerdem habe ich es nur in Firefox 4 getestet, sodass ich nicht weiß, ob einige der Dinge, die ich mache, konsistent funktionieren, insbesondere das Zusammenführen einer ungültigen Eingabe, die als NaN analysiert wird, zu einem Standardwert in meiner wpFunktion.

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 Zeichen

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

Nicht Golfversion:

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

Zuallererst: Das wird nicht einmal kompiliert, da Java keine mehrzeiligen Zeichenfolgen hat. Sie können nicht erwarten, dass Zeilen in der Mitte eines Strings unterbrochen werden und dass dies funktioniert.
Joey

Ok, ich habe aufgehört zu versuchen, es auf dem Bildschirm gut aussehen zu lassen und habe nur die einzelne Zeile eingefügt.
Joe Zitzelberger

1
Außerdem (Einsparungen in Klammern): Die Klasse kann mit einem einzigen Buchstaben (40) benannt werden. Es gibt dort viele unnötige Leerzeichen (80). Sie können Deklarationen mehrerer Variablen desselben Typs reduzieren, z int a=5,b=10. B. (34). Sie können die Argumente im Konstruktor anders als die zu vermeidenden Felder benennen this.(10). Sie können Lganz eliminieren, da es immer bei 1(4) bleibt . Sie können die Initialisierung von Hund Gdie im Konstruktor ohnehin gesetzt werden, weglassen (6). Sie können für alle Variablen und Methoden Ein-Buchstaben-Namen verwenden (235).
Joey

Stimmt, aber das wäre völlig unlesbar. Dies ist der Punkt, an dem ich sehe, dass Code-Golf wirklich zum Code-Bowling wird. Aber wenn ich etwas Zeit finde, werde ich es heute Abend aufpolieren.
Joe Zitzelberger

1
Korrektur für die vorherige Abbildung: (272). Sie können fuzzifymit dem bedingten Operator (20) neu schreiben . Sie können das BufferedReaderin getInt(19) inline . Sie können verwenden String#matches, um das Patternund Matcherin getInt(48) zu vermeiden . Sie können den bedingten Operator auch in processGuess(30) verwenden. Ich bin jetzt auf 1360 anstatt auf Ihre anfängliche 1953.
Joey

2

Wecker Radio, 5756 Bit (2159 Bytes)

Bald zu einem Wecker in Ihrer Nähe! Zeilenumbrüche dienen nur der Lesbarkeit. ASCII-Werte werden gelegentlich anstelle der numerischen Literalanzeige auf dem Bildschirm verwendet. Passend für Spezifikationen. Verwendet Standardeinstellungen für Aund I. Verwenden Sie bei der ersten Eingabe NULL als Vermesser, andernfalls legen Sie die Nummer fest. PADSIZE MUSS 4 SEIN! Zellen müssen 7-Bit sein und wickeln! Turing-komplett! Ausgänge higher, lower, correct, you won, und you lost.

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

1

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

Keine sehr freundliche Anleitung.


Sehr schön! Wenn Sie nur eine Randomisierung hätten, wenn AI Spieler 2 ist ...
Eelvex

@Eelvex, geschlagen von 30 Zeichen.
zzzzBov

1

Ich hatte das Bedürfnis, Java etwas gerecht zu werden. :) :)

Java - 486 437 421 414

Golf gespielt

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

Etwas 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");
    }
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.