Devinez le nombre

10

La description

Créez un jeu "Devinez le nombre" pleinement fonctionnel. Le jeu est joué par deux joueurs comme suit:

  1. le joueur un choisit un nombre (A) entre 1 et N
  2. le joueur deux essaie de deviner A en choisissant un nombre (B) dans la même gamme
  3. le premier joueur répond "supérieur" if A > B , "inférieur" if A < B ou "correct" if A = B .
  4. les étapes 2-3 sont répétées I fois ou jusqu'à ce que "correct" réponde.
  5. Si "correct" est entendu, le joueur deux gagne sinon il perd.

Spécifications

Spécifications minimales pour une entrée valide:

  • l'utilisateur peut jouer en tant que joueur un ou joueur deux.
  • l'ordinateur joue l'autre rôle.
  • l'ordinateur doit vraiment essayer de deviner le nombre en jouant en tant que joueur deux (donc, deviner contre les données données ou ignorer les données données est de la triche)
  • N = 100 ou saisie par l'utilisateur (votre choix)
  • I = 5 ou saisie par l'utilisateur (votre choix)
  • le programme doit annoncer le gagnant à la fin.
  • des instructions entièrement lisibles par l'homme sur ce qu'il faut faire à chaque étape (par exemple, "Jouez en tant que joueur un ou joueur deux?" , "Entrez une autre supposition:" , etc.) - ne devenez pas fou avec celle-ci; restez simple.

Conditions gagnantes

Dans cet ordre:

  1. L'entrée la plus votée l'emporte si elle a au moins 3 voix d'avance sur la deuxième entrée la plus votée.
  2. L'entrée la plus courte gagne.
Eelvex
la source
Je n'ai pas lu explicitement que nous avions besoin d'une IA sur celle-ci. Pourriez-vous confirmer que les deux joueurs sont humains?
JB
@JB: désolé: / Vous ne avez besoin d' un AI. Je mets à jour la question maintenant ...
Eelvex
2
Je pense que les textes d'instructions pour chaque étape devraient être donnés, sinon il est difficile de comparer les réponses.
Joey
@Joey Certainement
Šimon Tóth
La validation des entrées utilisateur est-elle importante?
zzzzBov

Réponses:

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

Histoire:

  • 2011-02-21 18:44 (620) Non golfé.
  • 2011-02-21 19:15 (365) Premier tour de golf.
  • 2011-02-21 19:31 (359) Certains en ligne.
  • 2011-02-21 19:38 (340) Certaines chaînes raccourcies.
  • 2011-02-21 19:44 (339) whilefor
  • 2011-02-21 19:53 (331) Certaines chaînes en double tirées dans des variables.
  • 2011-02-21 19:53 (330) Une autre variable en ligne.
  • 2011-02-21 19:53 (328) Condition de boucle optimisée. Cependant, je ne peux pas utiliser de pipeline.
  • 2011-02-22 01:57 (326) else{if...}elseif- enregistre les accolades.
  • 2011-02-22 12:42 (325) Déplacé beaucoup de choses autour, en utilisant une table de hachage au lieu de switchpour éviter de nommer la boucle. Maintenant, je peux aussi utiliser juste breaket un pipeline. L'annonce du gagnant a été déplacée dans un filtre qui n'utilise exitdonc aucune pause, jamais.
  • 2011-02-23 01:23 (308) Au lieu d'une elseifchaîne pour vérifier la supposition, j'utilise simplement une chaîne de formatage avec des valeurs différentes pour les valeurs négatives, positives et nulles. Économise beaucoup.
  • 2011-02-23 02:16 (306) Utiliser la soustraction au lieu de l'égalité.
  • 2011-03-12 02:27 (289) Réduit au même niveau d'interaction utilisateur rudimentaire que la solution Ruby. Bien sûr, c'est plus court alors.
Joey
la source
9

TRS-80 BASIC, 249 caractères

Je pense que c'est peut-être la première fois que je soumets une réponse à ce site que j'ai écrite avant son existence.

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

En fait, je l'ai écrit avant l'existence du Web mondial. Dans les années 80, tout comme les TRS-80 devenaient sans objet.

Ceci est un exemple de "one-liner" - une tentative pour adapter le programme le plus intéressant possible à une seule ligne de BASIC. C'était mon premier one-liner, et pas terriblement impressionnant. (Il y avait de superbes doublures flottantes.)

Une ligne de TRS-80 BASIC était limitée à 255 caractères, moins un couple pour les frais généraux. Bien que vous puissiez parfois dépasser cela, car la vraie limite était de 255 octets après la tokenisation - mais l'éditeur tronquait également une ligne qui avait plus de 255 caractères avant la tokenisation, et vous deviez utiliser des astuces dans l'éditeur de ligne afin d'insérer des caractères de contrôle littéraux comme des sauts de ligne dans vos chaînes.

Et oui, pour clarifier, ces sauts de ligne dans la liste sont des caractères de nouvelle ligne littéraux. (Pour les obtenir dans votre code, vous devez utiliser la Ccommande de suspension pendant EDITla ligne. Une douleur totale, mais cela vaut la peine de remplacer huit caractères ou plus +CHR$(13)par un.)

Merde, je joue au golf depuis longtemps.

boite à pain
la source
6

C 397 caractères

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

Sous une forme plus lisible.

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
la source
@Joey corrigé maintenant.
fR0DDY
eh bien, je ne sais pas C. complet, mais pouvez-vous expliquer comment un programme avec des variables sans spécificateur de type se compile?
MAKZ
Toute variable sans type spécifié est un entier
Ethiraric
4

C #:

Nombre de caractères: Avec espaces: 575 Sans espaces: 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);
    }

Modifier do while est maintenant "Goto" ( frisson )

Yngve B-Nilsen
la source
3

Bonne vieille plaine 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 agréable et confortable
  • 24/11/2011 09:38:00 616 fixe et raccourci
  • 24/11/2011 11:52:00 555 raccourci
Šimon Tóth
la source
1
vous avez écrit cela à l'avenir? c'est très intelligent !!
mikera
3

Javascript

Nouvelle version minifiée ( appels supprimés varet réduits alert:

268 caractères

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

Pour exécuter l'appel g(100);, l'auto-exécution n'est pas comptée, car elle ajoute un nombre variable de caractères (275 caractères pour g(100);).

d'origine (environ 600 caractères, espace compris):

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

Minifié (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
la source
désolé, je n'ai pas remarqué. Mieux vaut mettre votre dernier code en haut. (De plus, je n'arrive pas à le faire fonctionner correctement: - /)
Eelvex
@Eelvex: Pendant que vous essayez de le faire fonctionner, ma solution est plus courte que celle actuellement acceptée. Et vous devez vraiment spécifier les chaînes exactes à utiliser lors de l'interaction avec l'utilisateur. Fondamentalement, tout ce que Magnus a fait a été d'utiliser une interaction plus concise qui est bien sûr plus courte.
Joey
Suis-je en train de voir cela correctement et ce programme ne gère pas le cas où l'humain est le joueur 1 correctement? Au moins, je ne vois pas de code permettant à l'IA de deviner un nombre et au joueur d'entrer »supérieur«, »inférieur« ou »correct« n'importe où ...
Joey
@Joey, j'avais l'impression que si un joueur humain devait jouer en premier, il n'aurait qu'à choisir un numéro. Je suppose que je suis un peu brumeux sur la raison pour laquelle un joueur humain choisirait plus haut, plus bas et plus correctement
zzzzBov
Suivez simplement les instructions pour les joueurs 1 et 2. L'un d'eux est un humain, l'autre est un ordinateur. Il n'y a cependant pas de différence de protocole. De plus, la phrase «l'ordinateur doit vraiment essayer de deviner le nombre tout en jouant en tant que joueur deux» implique beaucoup que l'ordinateur doit deviner un nombre.
Joey
3

Python 2,7 334 335 327 314 300 caractères (ma première fois au golf)

(335) J'ai oublié d'échapper à la nouvelle ligne.

(327) Suppression de 100 redondants pour randint. Comparaison du premier caractère de la réponse, au lieu de la chaîne entière.

(314) Impression mise à jour qui a gagné.

(300) Modifié lorsque le joueur était le joueur 1: modification de la devinette du nombre en tant qu'ordinateur

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
la source
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"

Voici la version sans AI.

JB
la source
Je me rends compte que c'est une vieille réponse, mais je ne le savais pas à l'époque et je suis juste tombé dessus - vous pourriez probablement utiliser des numéros de ligne plus courts comme 1, 2, 3, etc., ou simplement supposer quelque chose comme QBASIC / FreeBASIC et omettez-les complètement.
nyuszika7h
@ nyuszika7h C'est plus un concours de popularité que le golf de code, je préfère les numéros de centaine plus typiques.
JB
C'est? Eh bien, c'est étiqueté code-golf.
nyuszika7h
Avec des conditions de gain spécifiques et explicites (et moche, à mon humble avis).
JB
Oh oui, j'ai vu ça mais je l'ai oublié.
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")

Version non golfée:

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
la source
2

Javascript

Il s'agit d'environ 800 caractères et comprend votre sélection binaire de base «AI» pour la moitié du lecteur d'ordinateur. Je pourrais probablement sauver quelques caractères si je me débarrassais de tous mesvar mais je n'aime pas les fuites de variables même en jouant au code. J'ai aussi fait deux étapes "Est-ce correct?" / "Est-ce plus élevé?" chose avec confirmer les pop-ups plutôt que de donner une pop-up rapide et de vérifier "correct" / "supérieur" / "inférieur" bien que cela puisse peut-être aussi enregistrer certains caractères, je n'ai pas vraiment vérifié.

De plus, je ne l'ai testé que sur Firefox 4, donc je ne sais pas si certaines des choses que je fais fonctionnent de manière cohérente, en particulier la fusion d'une entrée non valide, analysée comme NaN, à une valeur par défaut dans ma wpfonction.

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

Java, 1886 caractères

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

Version non golfée:

import java.io.*;
import java.util.*;
import java.util.regex.*;
public class GuessGame {
    int L = 1;
    int H = 100;
    int G = 5;
    int N;
    String HS = "higher";
    String LS = "lower";
    String CS = "correct";
    public static void main(String[] args) {
        if (args.length == 2)
            new GuessGame(Integer.parseInt(args[0]), Integer.parseInt(args[1])).play();
        else if (args.length == 0)
            new GuessGame(100, 5).play();
        else
            System.out.println("usage GuessGame HighInteger NumberGuess");
    }
    GuessGame(int H, int G) {
        this.H = H;
        this.G = G;
    }
    void play() {
        int pNum = getInt("Play As Player 1 or Player 2?","1|2");
        if (pNum == 1)
            playP2();
        else
            playP1();
        System.out.println("The number was " + N);
    }
    int getInt(String pmpt, String val) {
        BufferedReader cin = new BufferedReader(new InputStreamReader(System.in));
        int i = 0;
        Pattern p = Pattern.compile(val);
        boolean fnd = false;
        String ln = "";
        try {
            while (!fnd) {
                System.out.println(pmpt);
                ln = cin.readLine();
                Matcher m = p.matcher(ln);
                fnd = m.find();
            }
            i = Integer.parseInt(ln);
        } catch (Exception ex) {}
        return i;
    }
    String processGuess(int g) {
        if (N > g)
            return HS;
        else if (N < g)
            return LS;
        else
            return CS;
    }
    void playP1() {
        N = new Random().nextInt(H);
        for (; G > 0; G--) {
            String rslt = processGuess(getInt("Player 2, enter your guess:", "\\d?"));
            System.out.println(rslt);
            if (rslt.equals(CS)) {
                System.out.println("Player 2 wins!");
                break;
            }
        }
    }
    void playP2() {
        N = getInt("Player 1, enter your number:", "\\d+");
        int max = H;
        int min = L;
        int nextGuess = min + (max - min) / 2;
        for (; G > 0; G--) {
            System.out.println("Player 2, enter your guess:" + nextGuess);
            String rslt = processGuess(nextGuess);
            System.out.println(rslt);
            if (rslt.equals(HS)) {
                min = nextGuess + 1;
                nextGuess = fuzzify(nextGuess + (max - nextGuess) / 2, min, max);
            }
            if (rslt.equals(LS)) {
                max = nextGuess - 1;
                nextGuess = fuzzify(nextGuess - (nextGuess - min) / 2, min, max);
            }
            if (rslt.equals(CS)) {
                System.out.println("Player 2 wins!");
                break;
            }
        }
    }
    int fuzzify(int i, int mn, int mx) {
        int fz = new Random().nextInt(3);
        if (fz == 1)
            return Math.max(mn, --i);
        if (fz == 2)
            return Math.min(mx, ++i);
        return i;
    }
}
Joe Zitzelberger
la source
Tout d'abord: cela ne compile même pas, car Java n'a pas de chaînes multi-lignes. Vous ne pouvez pas vous attendre à casser des lignes au milieu d'une chaîne et à fonctionner.
Joey
Ok, j'ai cessé d'essayer de le rendre bien à l'écran et j'ai juste collé la ligne unique.
Joe Zitzelberger
1
De plus (économies entre parenthèses): La classe peut être nommée avec une seule lettre (40). Il y a beaucoup d'espaces blancs inutiles là-dedans (80). Vous pouvez réduire les déclarations de plusieurs variables du même type, par exemple int a=5,b=10(34). Vous pouvez nommer les arguments dans le constructeur différents des champs à éviter this.(10). Vous pouvez éliminer Lcomplètement car il reste toujours à 1(4). Vous pouvez de toute façon ignorer l'initialisation de Het Gqui est définie dans le constructeur (6). Vous pouvez utiliser des noms à une lettre pour toutes les variables et méthodes (235).
Joey
C'est vrai, mais ce serait totalement illisible. C'est le point où je vois le code-golf devenir vraiment le code-bowling. Mais si je trouve du temps, je vais le polir ce soir.
Joe Zitzelberger
1
Correction de la figure précédente: (272). Vous pouvez réécrire fuzzifyà l'aide de l'opérateur conditionnel (20). Vous pouvez insérer le BufferedReaderin getInt(19). Vous pouvez utiliser String#matchespour éviter le Patternet Matcherdans getInt(48). Vous pouvez également utiliser l'opérateur conditionnel dans processGuess(30). Je suis maintenant à 1360 au lieu de votre premier 1953.
Joey
2

Radio-réveil, 5756 bits (2159 octets)

Bientôt au réveil près de chez vous! Les sauts de ligne sont uniquement lisibles. Les valeurs ASCII sont parfois utilisées à la place de l'affichage numérique littéral à l'écran. Convient aux spécifications. Utilise les valeurs par défaut pour Aet I. Sur la première entrée, utilisez NULL pour deviner, sinon vous définissez le nombre. PADSIZE DOIT ÊTRE 4! LES CELLULES DOIVENT ÊTRE À 7 BITS ET ENVELOPPER! Turing-complet! Sorties higher, lower, correct, you wonet you lost.

}+>,[,>>+++++++[>>>>>>>+++++++>+++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++]>>>>>>>++++++.>>>>>>>++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++[+++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++>+++>>>>>>>]>++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++.++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.++++++.++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++[++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++>+>>>>>>>]>+++.+++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++[
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++>++++>>>>>>>]>+++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++.+++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++.[+]+][++++[+++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++>,[+[+++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++>++>>>>>>>]>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.+++.++++++++.[+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++>+++>>>>>>>]>.+++++++++++++.[+
]+][++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++[++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++>+>>>>>>>]>++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
++++++++++++.+++..++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++.++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++.+++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++[+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++>+>>>>>>>]>+++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++.>>>>>>>[+]>>>>>>>+++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++]]][>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++[++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++>+++>>>>>>>]>+++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++.+++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.++++++.+++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++[+++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++>+>>>>>>>]>+++.++[+++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+
+>>>>>>>]>.+++.++++.+.>>>>>>>[+]+][+++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++[++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++>+++>>>>>>>]>+++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++.+++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
++++++.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++[+++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++>+>>>>>>>]>+++.++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++[+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++>>>>>>>]>++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++.++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.]
Timtech
la source
1

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

Instructions pas très sympathiques cependant.

Magnus Holm
la source
Très agréable! Si seulement vous aviez une randomisation quand l'IA est le joueur 2 ...
Eelvex
@Eelvex, battu par 30 caractères.
zzzzBov
1

J'ai ressenti le besoin de rendre justice à Java. :)

Java - 486 437 421 414

Golfé

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

Légèrement non golfé

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
la source