Numarayı tahmin et


10

Açıklama

Tamamen çalışan bir "sayı sanırım" oyunu oluşturun. Oyun iki oyuncu tarafından şu şekilde oynanır:

  1. Birinci oyuncu 1 ve N arasında bir sayı seçer (A)
  2. Oyuncu iki, aynı aralıkta bir sayı (B) seçerek A'yı tahmin etmeye çalışır.
  3. ilk oyuncu "daha yüksek" if A > B , "daha düşük" if A < B veya "doğru" olarak yanıt verir if A = B.
  4. adımlar 2-3 tekrarlanan Ben kere ya da "doğru" kadar cevap edilir.
  5. "Doğru" duyulursa, iki oyuncu kazanır, aksi takdirde kaybeder.

gözlük

Geçerli bir giriş için minimum özellikler:

  • kullanıcı bir oyuncu veya iki oyuncu olarak oynayabilir.
  • bilgisayar diğer rolü oynar.
  • bilgisayar iki oyuncu olarak oynarken sayıyı gerçekten tahmin etmeye çalışmalıdır (yani, verilen verilere karşı tahmin etmek veya verilen verileri görmezden gelmek hile yapıyor)
  • N = 100 veya kullanıcı tarafından girdi (seçiminiz)
  • I = 5 veya kullanıcı tarafından girdi (seçiminiz)
  • programı sonunda kazanan ilan etmelidir.
  • her adımda ne yapılacağına dair insan tarafından okunabilir tam talimatlar (örn. "Oyuncu bir ya da ikinci oyuncu olarak mı oynuyorsunuz?" , "Başka bir tahmin girin:" , vb.) - bu konuda çıldırmayın; sadece basit tut.

Kazanma koşulları

Bu sırayla:

  1. En yüksek giriş kazanır olarak eğer önümüzdeki en yüksek girdiyi olarak saniyede en az 3 oy var.
  2. En kısa katılım kazanır.

Ben açıkça bu bir AI gerekli okumak değildi. Her iki oyuncunun da insan olduğunu doğrulayabilir misiniz?
JB

@JB: bunun için üzgünüm: / Sen do bir AI gerekir. Soruyu şimdi güncelliyorum ...
Eelvex

2
Her adım için talimat metinlerinin verilmesi gerektiğini düşünüyorum, aksi takdirde cevapları karşılaştırmak zor.
Joey

@Joey Definitely
Šimon Tóth

Kullanıcı girişi doğrulaması önemli mi?
zzzzBov

Yanıtlar:


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

Tarih:

  • 2011-02-21 18:44 (620) Kanunsuz.
  • 2011-02-21 19:15 (365) Golfün ilk turu.
  • 2011-02-21 19:31 (359) Biraz satır içi.
  • 2011-02-21 19:38 (340) Bazı teller kısaldı.
  • 2011-02-21 19:44 (339) whilefor
  • 2011-02-21 19:53 (331) Yinelenen bazı dizeler değişkenlere çekildi.
  • 2011-02-21 19:53 (330) Başka bir değişken satır içinde.
  • 2011-02-21 19:53 (328) Optimize edilmiş döngü durumu. Ancak bir boru hattı kullanılamıyor.
  • 2011-02-22 01:57 (326) else{if...}elseif- parantezleri kaydeder.
  • 2011-02-22 12:42 (325)switch Döngüyü adlandırmaktan kaçınmak yerine, bir hashtable kullanarak birçok şeyi taşıdı . Şimdi sadece breakbir boru hattı da kullanabilirim. Kazanan duyurusu exit, hiç mola gerektirmeyen bir filtreye taşındı .
  • 2011-02-23 01:23 (308)elseif Tahmin kontrolü için bir zincir yerine sadece negatif, pozitif ve sıfır değerleri için farklı değerlere sahip bir format dizesi kullanıyorum. Çok tasarruf sağlar.
  • 2011-02-23 02:16 (306) Eşitlik yerine çıkartmanın kullanılması.
  • 2011-03-12 02:27 (289) Ruby çözümü ile aynı temel kullanıcı etkileşimi seviyesine düşürüldü. Tabii ki daha kısa.

9

TRS-80 BASIC, 249 karakter

Sanırım bu , sitenin varlığından önce yazdığım bu siteye ilk kez yanıt verdim .

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

Aslında, dünya çapında web var olmadan yazdım. 1980'lerde, tıpkı TRS-80'lerin alakasız hale gelmesi gibi.

Bu bir "tek astarlı" bir örnektir - yapabileceğiniz en ilginç programı tek bir BASIC satırına sığdırma girişimi. Bu benim ilk tekli astarımdı ve çok etkileyici değil. (Orada şaşırtıcı tek gömlekleri vardı.)

TRS-80 BASIC dizisi 255 karakterle sınırlıydı, eksi çift ek yük için. Tokenizasyondan sonra gerçek sınır 255 bayt olduğu için bunu bazen aşabilirsiniz, ancak editör ayrıca tokenizasyondan önce 255 karakterden fazla bir satırı keser ve gerçek kontrol karakterleri eklemek için hat düzenleyicide hileler kullanmanız gerekir dizelerinize yeni satırlar gibi.

Ve evet, açıklığa kavuşturmak gerekirse, listedeki satır sonları gerçek yeni satır karakterleri. (Onları kodunuza almak için, satırı Cgirerken hange komutunu kullanmanız gerekiyordu EDIT. Toplam bir acı, ancak sekiz veya daha fazla karakteri +CHR$(13)biriyle değiştirmeye değer .)

Kahretsin, uzun süredir golf oynuyorum.


6

C 397 Karakterler

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

Daha okunabilir bir biçimde.

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 Şimdi Düzeltildi.
fR0DDY

Peki, ben tam C bilmiyorum. Ama nasıl tür belirteci olmayan değişkenleri olan bir program derler derler misiniz?
MAKZ

Belirtilen türde olmayan herhangi bir değişken bir tamsayıdır
Ethiraric

4

C #:

Karakter sayısı: Boşluklu: 575 Boşluk yok: 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);
    }

Düzenleme işlemi artık "Git" ( titreme )


3

İyi eski düz 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 güzel ve rahat
  • 24/11/2011 09:38:00 616 sabit ve kısaltılmış
  • 24/11/2011 11:52:00 555 kısaltılmış

1
bunu gelecekte mi yazdın? bu çok akıllı !!
mikera

3

JavaScript

Yeni küçültülmüş sürüm (bırakılan varve azaltılan alertaramalar:

268 karakter

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

Çağrıyı çalıştırmak için g(100);, değişken sayıda karakter eklediğinden (275 karakter g(100);) otomatik yürütme sayılmaz .

orijinal (boşluk dahil yaklaşık 600 karakter):

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

Küçültülmüş (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')}}

üzgünüm, fark etmedim. En son kodunuzu en üste koyun. (Ayrıca, düzgün çalışması için alamıyorum: - /)
Eelvex

@Eelvex: Bunu çalıştırmaya çalışırken, çözümüm şu anda kabul edilenden daha kısa. Ve gerçekten kullanıcıyla etkileşimde kullanılacak tam dizeleri belirtmelisiniz. Temelde Magnus'un yaptığı her şey elbette daha kısa olan daha özlü etkileşim kullanmaktı.
Joey

Bunu doğru mu görüyorum ve bu program insanın oyuncu 1'in doğru olduğu durumu ele almıyor mu? En azından yapay zekanın bir sayı tahmin etmesi için kod görmüyorum ve oyuncu herhangi bir yere »daha yüksek«, »daha düşük« veya »doğru« girecek ...
Joey

@Joey, eğer bir insan oyuncu önce gidecek olsaydı, sadece bir numara seçmek zorunda kalacakları izlenimindeydim. Sanırım neden bir insan oyuncu daha yüksek, daha düşük ve doğru seçiyor olacak biraz sisli
zzzzBov

Oyuncu 1 ve 2 için talimatları izleyin. Bunlardan biri insan, diğeri bilgisayar. Ancak protokolde bir fark yoktur. Ayrıca, bilgisayar »cümle gerçekten oyuncu iki olarak oynarken sayıyı tahmin etmeye çalışmalıdır« çok bilgisayar bir sayı tahmin etmek zorunda anlamına gelir.
Joey

3

Python 2.7 334 335 327 314 300 Karakterler (My ilk kez golf)

(335) Yeni satırdan kaçmayı unuttum.

(327) Randint için gereksiz 100 çıkarıldı. Tüm dize yerine yanıtın ilk karakterinin karşılaştırılması.

(314) Kazanan güncellenen baskı.

(300) Oyuncu 1 iken değişti: sayının bilgisayar olarak tahmin edilmesi değişti

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

TEMEL, 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"

İşte AI olmayan sürüm.


Bunun eski bir cevap olduğunu anlıyorum, ama o zamanlar bunu bilmiyordum ve bunun üzerine tökezledim - muhtemelen 1, 2, 3 vb.Gibi daha kısa satır numaraları kullanabilir veya sadece QBASIC / FreeBASIC gibi bir şey varsayabilirsiniz ve onları tamamen atlayın.
nyuszika7h

@ nyuszika7h Bu kod golf daha popüler bir yarışma, daha tipik yüz aralığı numaraları için gitmek istiyorum.
JB

Bu? Peki, etiketlendi code-golf.
nyuszika7h

Belirli ve açık (ve berbat, IMHO) kazanma koşulları ile.
JB

Ah doğru, bunu gördüm ama unuttum.
nyuszika7h

2

Lua 360 Karakterleri

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

Golfsiz sürüm:

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

Bu yaklaşık 800 karakterdir ve bilgisayar çalar yarısı için temel ikili seçim 'AI' içerir. Ben tüm vars kurtulmak eğer muhtemelen birkaç karakter kaydedebilirsiniz ama kod golf yaparken bile sızıntı değişkenleri sevmiyorum. İki adım da "Bu doğru mu?" / "Bu daha yüksek mi?" istemi pop-up vermek yerine "doğru" / "daha yüksek" / "daha düşük" olup olmadığını kontrol etmek yerine pop-up'ları onaylamak da olabilir.

Ayrıca, sadece Firefox 4'te test ettim, bu yüzden yaptığım bazı şeylerin tutarlı bir şekilde çalışıp çalışmadığını bilmiyorum, özellikle NaN olarak ayrıştırılan geçersiz bir girdiyi işlevimdeki varsayılan bir değere birleştirmek 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

Java, 1886 karakter

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

Golfsiz versiyon:

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

Her şeyden önce: Java'nın çok satırlı dizeleri olmadığı için bu bile derlenmez. Bir dizenin ortasındaki çizgileri kırmayı ve bu dizinin çalışmasını bekleyemezsiniz.
Joey

Tamam, ekranda iyi görünmeye çalışmayı bıraktım ve sadece tek satırı yapıştırdım.
Joe Zitzelberger

1
Ayrıca (parantez içinde tasarruf): Sınıf tek bir harfle adlandırılabilir (40). Orada bol miktarda gereksiz boşluk var (80). Aynı türden çok değişkenli bildirimleri daraltabilirsiniz, örneğin int a=5,b=10(34). Kaçınılması gereken yapıcıdaki bağımsız değişkenleri alanlardan farklı olarak adlandırabilirsiniz this.(10). Her Lzaman 1(4) 'de kaldığı için tamamen ortadan kaldırabilirsiniz . Zaten kurucuda başlatılan Hve Gayarlananları dışarıda bırakabilirsiniz (6). Tüm değişkenler ve yöntemler için tek harfli adlar kullanabilirsiniz (235).
Joey

Doğru, ama bu tamamen okunamaz olurdu. Kod-golf gerçekten şaşırtıcı kod bowling gördüğüm nokta bu. Ama biraz zaman bulursam, bu gece cilalayacağım.
Joe Zitzelberger

1
Önceki rakam için düzeltme: (272). fuzzifyKoşullu işleci (20) kullanarak yeniden yazabilirsiniz . Sen satır içine alabilirsiniz BufferedReaderin getInt(19). Sen kullanabilirsiniz String#matcheskaçınmak Patternve Matcheriçinde getInt(48). Koşullu operatörü de kullanabilirsiniz processGuess(30). Şimdi ilk 1953'ünüz yerine 1360'a düştüm.
Joey

2

Çalar Saatli Radyo, 5756 bit (2159 bayt)

Yakında size yakın bir çalar saat geliyor! Yeni satırlar yalnızca okunabilirlik içindir. ASCII değerleri, ara sıra sayısal gösterge yerine bazen kullanılır. Teknik özelliklere uyar. İçin varsayılan kullanır Ave I. İlk girişte, tahmin etmek için NULL kullanın, aksi takdirde sayıyı ayarlarsınız. PADSIZE 4 OLMALIDIR! HÜCRELER 7 BİT VE WRAP OLMALIDIR! Turing-tam! Çıkışlar higher, lower, correct, you won, veyou lost .

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

1

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

Gerçi çok kolay talimatlar.


Çok hoş! AI oyuncu 2 olduğunda sadece rastgele bir şey olsaydı ...
Eelvex

@Eelvex, 30 karakter tarafından dövüldü.
zzzzBov

1

Java'ya adalet yapma gereğini hissettim. :)

Java - 486 437 421 414

golfed

import java.util.*;class GuessANumber{static<T>void p(T p){System.out.println(p);}static int i(){return new Scanner(System.in).nextInt();}public static void main(String[]a){int c,g,f=101,i=0;p("Pick (1) or guess (2)?");c=i();if(c==1)p("Pick a number (1-100)");g=c==1?i():new Random().nextInt(100);while(f!=g&&i++<5){p("Guess:");f=c==2?i():f>g?f/2:f+f/2;if(c==1)p(f);p(f>g?"lower":"higher");}if(f==g)p("correct");}}

Biraz Uynolfed

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");
    }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.