अंदाज लगाओ


10

विवरण

एक पूरी तरह से काम कर "संख्या का अनुमान" खेल बनाएँ। खेल दो खिलाड़ियों द्वारा इस प्रकार खेला जाता है:

  1. खिलाड़ी 1 और N के बीच एक संख्या (A) चुनता है
  2. खिलाड़ी दो एक ही रेंज में ए (बी) चुनने का अनुमान लगाने की कोशिश करता है
  3. पहला खिलाड़ी "उच्च" if A > B , "निचला" if A < B या "सही" प्रतिक्रिया करता है if A = B
  4. 2-3 कदम दोहराए जाते हैं I बार या जब तक "सही" जवाब नहीं दिया जाता है।
  5. यदि "सही" सुना जाता है, तो खिलाड़ी दो जीतता है अन्यथा वह हार जाता है।

चश्मा

मान्य प्रविष्टि के लिए न्यूनतम चश्मा:

  • उपयोगकर्ता खिलाड़ी एक या खिलाड़ी दो के रूप में खेल सकता है।
  • कंप्यूटर दूसरी भूमिका निभाता है।
  • कंप्यूटर को वास्तव में खिलाड़ी दो के रूप में खेलते समय संख्या का अनुमान लगाने की कोशिश करनी चाहिए (इसलिए, दिए गए डेटा के खिलाफ अनुमान लगाना या दिए गए डेटा को अनदेखा करना धोखा है)
  • उपयोगकर्ता द्वारा एन = 100 या इनपुट (आपकी पसंद)
  • I = 5 या उपयोगकर्ता द्वारा इनपुट (आपकी पसंद)
  • कार्यक्रम के अंत में विजेता की घोषणा करनी चाहिए।
  • प्रत्येक चरण में क्या करना है की पूर्ण मानव पठनीय निर्देश (उदाहरण के लिए "खिलाड़ी के रूप में खेलते हैं एक या दो खिलाड़ी?" , "एक और अनुमान दर्ज करें:" , आदि) - इस पर पागल न हों; बस इसे सरल रखें।

जीतने की स्थिति

उस क्रम में:

  1. अगर दूसरी सबसे ज्यादा वोट वाली एंट्री से कम से कम 3 वोट आगे हैं तो सबसे ज्यादा वोटिंग वाली एंट्री जीत जाती है ।
  2. सबसे छोटी प्रविष्टि जीतती है।

मैंने स्पष्ट रूप से नहीं पढ़ा कि हमें उस पर एक एआई की जरूरत थी। क्या आप पुष्टि कर सकते हैं कि दोनों खिलाड़ी मानव हैं?
जेबी

@JB: अत: क्षमा करें: / आप करते हैं एक ऐ की जरूरत है। मैं अब सवाल अपडेट कर रहा हूं ...
Exx

2
मुझे लगता है कि प्रत्येक चरण के लिए निर्देश ग्रंथ दिए जाने चाहिए, अन्यथा उत्तरों की तुलना करना कठिन है।
जॉय

@ जोये निश्चित रूप से
eyमोन तोथ

क्या उपयोगकर्ता इनपुट सत्यापन महत्वपूर्ण है?
zzzzBov

जवाबों:


3

विंडोज पॉवरशेल, 289

nal ^ Read-Host
filter p{"Player $_ wins.";exit}
$p=1-(^ Player 1 or 2)
$n=($x=1)..($y=99)|random
if($p){$n=^ Enter number}1..5|%{if($p){'{0:"higher";"lower";"correct";2|p}'-f($n-(^ Guess))|iex}else{"Guessing, "+($g=$x..$y|random);@{104='$x=$g+1';108='$y=$g-1';99='2|p'}[+(^)[0]]|iex}}
1|p

इतिहास:

  • 2011-02-21 18:44 (620) Ungolfed।
  • 2011-02-21 19:15 (365) गोल्फिंग का पहला दौर।
  • 2011-02-21 19:31 (359) कुछ अशुभ।
  • 2011-02-21 19:38 (340) कुछ तार छोटे हो गए।
  • 2011-02-21 19:44 (339) whilefor
  • 2011-02-21 19:53 (331) कुछ डुप्लिकेट तार चर में खींच लिए गए।
  • 2011-02-21 19:53 (330) एक और चर का झुकाव।
  • 2011-02-21 19:53 (328) अनुकूलित लूप स्थिति। हालांकि, एक पाइपलाइन का उपयोग नहीं कर सकते।
  • 2011-02-22 01:57 (326) else{if...}elseif- ब्रेसिज़ बचाता है।
  • 2011-02-22 12:42 (325)switch लूप के नामकरण से बचने के लिए हैशटेबल का उपयोग करते हुए, बहुत सारे सामान इधर-उधर कर दिए। अब मैं सिर्फ breakऔर एक पाइपलाइन का भी उपयोग कर सकता हूं । विजेता की घोषणा एक ऐसे फिल्टर में चली गई, जिसमें exitकभी भी आवश्यक ब्रेक का उपयोग नहीं किया गया।
  • 2011-02-23 01:23 (308)elseif अनुमान की जांच के लिए एक श्रृंखला के बजाय मैं सिर्फ नकारात्मक, सकारात्मक और शून्य मूल्यों के लिए विभिन्न मूल्यों के साथ एक प्रारूप स्ट्रिंग का उपयोग करता हूं। बहुत बचता है।
  • 2011-02-23 02:16 (306) समानता के बजाय घटाव का उपयोग करना।
  • 2011-03-12 02:27 (289) रूबी समाधान के रूप में अल्पविकसित उपयोगकर्ता इंटरैक्शन के समान स्तर पर घटा। बेशक यह छोटा है।

9

टीआरएस -80 बुनियादी, 249 वर्ण

मुझे लगता है कि यह पहली बार हो सकता है कि मैंने इस साइट पर एक उत्तर प्रस्तुत किया है जो मैंने साइट के अस्तित्व में आने से पहले लिखा था।

0 CLS:RANDOM:A=1:B=1E3:Q=RND(1E3):FORX=1TO8E9:PRINTA"-"B:INPUT"
 Guess";C:IFC<AORC>B,X=X-1:NEXTELSEIFC<QPRINT"Too low":A=C+1:NEXTELSEIFC>QPRINT"Too high":B=C-1:NEXTELSEPRINTC"is right!!
 It took you"X"tries.
":X=9E9:NEXT:FORX=0TO0:X=INKEY$="":NEXT:RUN

वास्तव में, मैंने इसे दुनिया भर में मौजूद होने से पहले लिखा था। 1980 के दशक में, जैसे TRS-80s अप्रासंगिक हो रहे थे।

यह एक "वन-लाइनर" का एक उदाहरण है - सबसे दिलचस्प कार्यक्रम जिसे आप बेसिक की एक पंक्ति में फिट करने का प्रयास कर सकते हैं। यह मेरा पहला वन-लाइनर था, न कि बहुत प्रभावशाली। (वहाँ कुछ अद्भुत एक-लाइनर वहाँ बाहर घूम रहे थे।)

TRS-80 BASIC की एक रेखा 255 वर्णों तक सीमित थी, जो ओवरहेड के लिए एक जोड़ी थी। यद्यपि आप कभी-कभी इसे पार कर सकते हैं, क्योंकि टोकन के बाद वास्तविक सीमा 255 बाइट्स थी - लेकिन संपादक एक पंक्ति को भी काट देगा, जिसमें टोकन से पहले 255 से अधिक वर्ण थे, और आपको साक्षर नियंत्रण वर्ण सम्मिलित करने के लिए लाइन संपादक में ट्रिक्स का उपयोग करने की आवश्यकता थी अपने तार में newlines की तरह।

और हाँ, स्पष्ट करने के लिए, सूची में उन पंक्ति विराम शाब्दिक newline वर्ण हैं। (अपने कोड में उन्हें प्राप्त करने के लिए आपको लाइन को Cइंगेज करते समय हैंग कमांड का उपयोग करने की आवश्यकता EDITथी। कुल दर्द, लेकिन +CHR$(13)एक के साथ आठ या अधिक वर्णों को बदलने के लिए इसके लायक है ।)

अरे, मैं एक लंबे समय के लिए गोल्फ रहा हूँ।


6

C 397 वर्ण

N,H=99,L=0,c=0,w=1;main(){char s[9];puts("Play as player 1 or 2: ");scanf("%d",&N);if(N-1){getchar();do{N=rand()%(H-L)+L+1;printf("My guess: %d\n",N);gets(s);if(*s=='c'){w=2;break;}if(*s-'l')H=N-1;else L=N-1;c++;}while(c<5);}else{N=rand()%99+1;while(c<5){puts("Enter guess: ");scanf("%d",&H);if(H==N){puts("correct");break;}else puts(H>N?"higher":"lower");c++;}if(c==5)w=2;}printf("Winner %d",w);}

अधिक पठनीय रूप में।

main()
{
        int i,N,H=100,L=0,c=0,w=1;
        char s[10];
        puts("Play as player 1 or 2: ");
        scanf("%d",&i);
        if(i-1)
        {
                getchar();
                do{
                        N=rand()%(H-L)+L+1;
                        printf("My guess: %d\n",N);
                        gets(s);
                        if(s[0]=='c')break;
                        else if(s[0]=='h')H=N-1;
                        else L=N-1;
                        c++;
                }while (c<5);
                if(c<5)w=2;
        }
        else
        {
                N=rand()%99+1;
                while (c<5)
                {
                        puts("Enter another guess: ");
                        scanf("%d",&H);
                        if(H==N){printf("correct\n");break;}
                        else if(H>N)printf("higher\n");
                        else printf("lower\n");
                        c++;
                }
                if(c==5)w=2;
        }
        printf("Winner %d",w);
}

@ जॉय ने अब ठीक किया।
fR0DDY

ठीक है, मैं पूर्ण सी नहीं जानता हूं। लेकिन क्या आप यह बता सकते हैं कि बिना किसी प्रकार के कंपाइलर वाले वेरिएबल्स वाला प्रोग्राम कैसे हो सकता है?
मकाज

कोई निर्दिष्ट प्रकार वाला कोई चर पूर्णांक नहीं है
Ethiraric

4

सी#:

वर्ण गणना: रिक्त स्थान के साथ: 575 कोई स्थान नहीं: 464

    static void Main()
    {
        Action<object> w = s => Console.WriteLine(s);
        Func<object, byte> r = t => { w(t); var s = Console.ReadLine(); return Convert.ToByte(s); };
        var p = r("Player (1/2):");
        int N = 100, g, i = 0, c, d;
        var q = new List<int>(Enumerable.Range(0, N));
        Func<Guid> x = Guid.NewGuid;
        c = p == 1 ? r("Number:") : q.OrderBy(j => x()).First();
        m: i++;
        g = p == 2 ? r("Guess:") : q.OrderBy(j => x()).First();
        d = g < c ? -1 : (g > c ? 1 : 0);
        w(d == -1 ? "Higher" : (d == 1 ? "Lower" : "correct"));
        q = q.Where(n => d == -1 ? n > g : n < g).ToList();
        if(c != g && i < 5) goto m;
        r(g);
    }

संपादित करें जबकि अब "गोटो" ( कंपकंपी ) है


3

अच्छा पुराना सादा सी

#include <stdio.h>
#define x(s) puts(s)
main(){int c,i,l,h,g;srand(time(NULL));p:x("You want to guess (1) or should I (2)?");scanf("%d",&c);i=5;if(c==2){x("Think a number 1..100");h=100;l=1;goto t;}if(c==1){x("Guess a number 1..100");h=rand()%100+1;goto g;}return 0;t:if(!i--)goto u;printf("%d (1)higher (2)lower (3)correct",g=rand()%(h-l)+l);scanf("%d",&c);if(c==1)l=g;if(c==2)h=g;if(c==3)goto c;goto t;g:if (!i--)goto c;scanf("%d",&g);if(g>h)x("lower");if(g<h)x("higher");if(g==h){x("correct");goto u;}goto g;u:x("You win");goto p;c:x("I win");goto p;}
  • 23/11/2011 16:44:00 883 अच्छा और आरामदायक
  • 24/11/2011 09:38:00 616 फिक्स्ड और छोटा
  • 24/11/2011 11:52:00 555 छोटा

1
आपने यह भविष्य में लिखा है? बहुत चालाक है !!
मीरा

3

जावास्क्रिप्ट

नया छोटा संस्करण ( कॉल ड्रॉप varऔर घटाया गया alert:

268 चरस

function g(m){n=u(confirm('Player pick?'));function u(p){if (p){do{n=parseInt(prompt('Number'))}while(isNaN(n)||!n||n>m)}else{n=parseInt(Math.random()*m)+1}return n}while(g!==n){do{g=parseInt(prompt('Guess'))}while(isNaN(g));alert(g<n?'higher':g>n?'lower':'correct')}}

कॉल चलाने के लिए g(100);, स्व-निष्पादन की गणना नहीं की जाती है, क्योंकि यह वर्णों की एक चर संख्या (275 वर्णों के लिए g(100);) जोड़ता है ।

मूल (व्हॉट्सएप सहित लगभग 600 चार्ट):

function guessTheNumber(m)
{
  var n = getNum(confirm('Player pick the number?')), g;

  function getNum(p)
  {
    var n;
    if (p)
    {
      do
      {
        n = parseInt(prompt('What number?'));
      } while(isNaN(n) || !n || n > m);
    }
    else
    {
      n = parseInt(Math.random() * m) + 1;
    }
    return n;
  }

  while(g!==n)
  {
    do
    {
      g = parseInt(prompt('Take a guess!'));
    } while(isNaN(g));
    if (g < n)
    {
      alert('higher');
    }
    else if (g > n)
    {
      alert('lower');
    }
    else
    {
      alert('correct!');
    }
  }
}

न्यूनतम (312) :

function g(m){var g,n=u(confirm('Player pick?'));function u(p){var n;if (p){do{n=parseInt(prompt('Number'))}while(isNaN(n)||!n||n>m)}else{n=parseInt(Math.random()*m)+1}return n}while(g!==n){do{g=parseInt(prompt('Guess'))}while(isNaN(g));if(g<n) alert('higher');else if(g>n) alert('lower');else alert('correct')}}

क्षमा करें, मैंने नोटिस नहीं किया बेहतर अपने नवीनतम कोड को शीर्ष पर रखें। (इसके अलावा, मैं इसे ठीक से चलाने के लिए प्राप्त नहीं कर सकता: - /)
एहलेक्स

@ बारह: आप इसे चलाने के लिए कोशिश कर रहे हैं, जबकि मेरा समाधान वर्तमान में फिर से स्वीकार किए जाने की तुलना में कम है। और आपको वास्तव में उपयोगकर्ता के साथ बातचीत करते समय उपयोग किए जाने वाले सटीक तारों को निर्दिष्ट करना चाहिए। मूल रूप से मैग्नस ने जो कुछ भी किया है वह अधिक संक्षिप्त बातचीत का उपयोग करना था जो कि निश्चित रूप से कम है।
जोए

क्या मैं सही ढंग से देख रहा हूं और यह कार्यक्रम उस मामले को नहीं संभालता है जहां मानव खिलाड़ी 1 सही ढंग से है? कम से कम मुझे एआई के लिए एक संख्या और खिलाड़ी को »उच्च«, »निम्न« या »सही« कहीं भी दर्ज करने के लिए कोड नहीं दिखता है ...
जॉय

@ जॉय, मैं इस धारणा के तहत था कि अगर एक मानव खिलाड़ी को पहले जाना है, तो उन्हें केवल एक नंबर चुनना होगा। मुझे लगता है कि मैं इस बात पर थोड़ा धूमिल हूं कि एक मानव खिलाड़ी उच्च, निम्न और सही
क्यों चुनता है

खिलाड़ियों 1 और 2 के निर्देशों का पालन करें। उनमें से एक मानव है, दूसरा कंप्यूटर है। हालांकि, प्रोटोकॉल में कोई अंतर नहीं है। इसके अलावा वाक्य »कंप्यूटर को वास्तव में खिलाड़ी दो के रूप में खेलते समय संख्या का अनुमान लगाने की कोशिश करनी चाहिए« बहुत बहुत मतलब है कि कंप्यूटर को एक संख्या का अनुमान लगाना है।
जोए

3

पायथन 2.7 334 335 327 314 300 वर्ण (मेरी पहली बार गोल्फिंग)

(335) न्यूलाइन से बच निकलना भूल गया।

(327) रेडंड के लिए निरर्थक 100 निकाला। पूरे स्ट्रिंग के बजाय प्रतिक्रिया के पहले चरित्र की तुलना।

(314) अपडेटेड प्रिंटिंग जिसने जीता।

(३००) खिलाड़ी १ खिलाड़ी होने पर बदल गया: कंप्यूटर के रूप में संख्या का अनुमान लगाना

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

2

बेसिक, 184

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

यहां नो-AI वर्जन दिया गया है।


मुझे लगता है कि यह एक पुराना उत्तर है, लेकिन मुझे यह वापस नहीं पता था और मैं बस इस पर अड़ गया था - आप शायद 1, 2, 3, आदि जैसी छोटी लाइन संख्याओं का उपयोग कर सकते हैं, या बस QBASIC / FreeBASIC की तरह कुछ मान सकते हैं और उन्हें पूरी तरह से छोड़ दें।
nyuszika7h

@ nyuszika7h यह कोड गोल्फ की तुलना में अधिक लोकप्रियता की प्रतियोगिता है, मैं अधिक विशिष्ट सौ-श्रेणी की संख्याओं के लिए जाऊंगा।
जेबी

यह है? खैर, यह टैग किया गया है code-golf
nyuszika7h

विशिष्ट और स्पष्ट (और घटिया, IMHO) जीतने की स्थिति के साथ।
जेबी

अरे ठीक है, मैंने वह देखा लेकिन इसे भूल गया।
nyuszika7h

2

लुआ 360 चार्ज

i=io.read p=print I=5 N=100 math.randomseed(os.time())r=math.random p"Play as player one or two?"o=i"*n">1 _=o and p("Input number between 1 and",N)n=o and i"*n"or r(I,N)l,u=1,N for k=1,I do p"Guess!"g=o and r(l,u)or i"*n"p("Guessed",g)if n==g then p"Correct"break elseif n>g then p"Higher"l=g else p"Lower"u=g end end p(o and"I"or"You",n==g and"Won"or"Loose")

गैर-गोल्फ संस्करण:

i=io.read
p=print
I=5
N=100
math.randomseed(os.time())      -- Make things less predictable
r=math.random                   
p"Play as player one or two?"
o=i"*n">1
_=o and p("Input number between 1 and",N) -- if one, ask for number
n=o and i"*n"or r(I,N)          -- get number from user or random
l,u=1,N                         -- boundaries for doing "smart" guessing
for k=1,I do
    p"Guess!"
    g=o and r(l,u)or i"*n"      -- get guess (random or input)
    p("Guessed",g)
    if n==g then p"Correct!"break -- break loop if guessed correctly
    elseif n>g then             -- if guess to low
    p"Higher"l=g else           -- print + update boundaries
    p"Lower"u=g end
end
p(o and"I"or"You",n==g and"Won"or"Loose") -- Determine outcome!

2

जावास्क्रिप्ट

यह लगभग 800 अक्षर है, और इसमें कंप्यूटर प्लेयर हाफ के लिए आपका बेसिक बाइनरी चयन 'एआई' शामिल है। अगर मैं अपने सभी से छुटकारा पा लेता तो शायद मैं कुछ पात्रों को बचा सकता था, varलेकिन मुझे कोड गोल्फिंग के दौरान भी चर लीक करना पसंद नहीं है। मैंने एक दो कदम भी किया "क्या यह सही है?" / "क्या यह अधिक है?" एक त्वरित पॉप-अप देने और "सही" / "उच्च" / "कम" के लिए जाँच करने के बजाय पॉप-अप के साथ बात हालांकि यह भी कुछ पात्रों को बचा सकता है, मैं वास्तव में जाँच नहीं किया था।

इसके अलावा, मैंने केवल इसे फ़ायरफ़ॉक्स 4 पर परीक्षण किया है, इसलिए मुझे नहीं पता कि कुछ चीजें जो मैं लगातार काम कर रहा हूं, विशेष रूप से अमान्य इनपुट को जमा करना, जिसे NaN के रूप में पार्स किया गया है, अपने wpफ़ंक्शन में डिफ़ॉल्ट मान के लिए ।

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

2

जावा, 1886 चार्ट

import java.io.*;import java.util.*;import java.util.regex.*;public class GuessGame {int L=1;int H=100;int G=5;int N;String HS="higher";String LS="lower";String CS="correct";public static void main(String[] args){if (args.length==2)new GuessGame(Integer.parseInt(args[0]),Integer.parseInt(args[1])).play();else if(args.length==0)new GuessGame(100,5).play();else System.out.println("usage GuessGame HighInteger NumberGuess");}GuessGame(int H,int G){this.H = H;this.G = G;}void play(){int pNum=getInt("Play As Player 1 or Player 2?","1|2");if(pNum==1)playP2();else playP1();System.out.println("The number was "+N);}int getInt(String pmpt,String val){BufferedReader cin=new BufferedReader(new InputStreamReader(System.in));int i=0;Pattern p=Pattern.compile(val);boolean fnd=false;String ln="";try{while(!fnd){System.out.println(pmpt);ln=cin.readLine();Matcher m=p.matcher(ln);fnd=m.find();}i=Integer.parseInt(ln);} catch (Exception ex) {}return i;}String processGuess(int g){if(N>g)return HS;else if(N<g)return LS;else return CS;}void playP1(){N=new Random().nextInt(H);for(;G>0;G--){String rslt=processGuess(getInt("Player 2, enter your guess:","\\d?"));System.out.println(rslt);if(rslt.equals(CS)){System.out.println("Player 2 wins!");break;}}}void playP2() {N=getInt("Player 1, enter your number:", "\\d+");int max=H;int min=L;int nextGuess=min+(max-min)/2;for (;G>0;G--){System.out.println("Player 2, enter your guess:" + nextGuess);String rslt=processGuess(nextGuess);System.out.println(rslt);if(rslt.equals(HS)){min=nextGuess+1;nextGuess=fuzzify(nextGuess+(max-nextGuess)/2,min,max);}if (rslt.equals(LS)){max=nextGuess-1;nextGuess=fuzzify(nextGuess-(nextGuess-min)/2,min,max);}if(rslt.equals(CS)){System.out.println("Player 2 wins!");break;}}}int fuzzify(int i,int mn,int mx){int fz=new Random().nextInt(3);if(fz==1)return Math.max(mn,--i);if(fz==2)return Math.min(mx,++i);return i;}}

गैर गोल्फ संस्करण:

import java.io.*;
import java.util.*;
import java.util.regex.*;
public class GuessGame {
    int L = 1;
    int H = 100;
    int G = 5;
    int N;
    String HS = "higher";
    String LS = "lower";
    String CS = "correct";
    public static void main(String[] args) {
        if (args.length == 2)
            new GuessGame(Integer.parseInt(args[0]), Integer.parseInt(args[1])).play();
        else if (args.length == 0)
            new GuessGame(100, 5).play();
        else
            System.out.println("usage GuessGame HighInteger NumberGuess");
    }
    GuessGame(int H, int G) {
        this.H = H;
        this.G = G;
    }
    void play() {
        int pNum = getInt("Play As Player 1 or Player 2?","1|2");
        if (pNum == 1)
            playP2();
        else
            playP1();
        System.out.println("The number was " + N);
    }
    int getInt(String pmpt, String val) {
        BufferedReader cin = new BufferedReader(new InputStreamReader(System.in));
        int i = 0;
        Pattern p = Pattern.compile(val);
        boolean fnd = false;
        String ln = "";
        try {
            while (!fnd) {
                System.out.println(pmpt);
                ln = cin.readLine();
                Matcher m = p.matcher(ln);
                fnd = m.find();
            }
            i = Integer.parseInt(ln);
        } catch (Exception ex) {}
        return i;
    }
    String processGuess(int g) {
        if (N > g)
            return HS;
        else if (N < g)
            return LS;
        else
            return CS;
    }
    void playP1() {
        N = new Random().nextInt(H);
        for (; G > 0; G--) {
            String rslt = processGuess(getInt("Player 2, enter your guess:", "\\d?"));
            System.out.println(rslt);
            if (rslt.equals(CS)) {
                System.out.println("Player 2 wins!");
                break;
            }
        }
    }
    void playP2() {
        N = getInt("Player 1, enter your number:", "\\d+");
        int max = H;
        int min = L;
        int nextGuess = min + (max - min) / 2;
        for (; G > 0; G--) {
            System.out.println("Player 2, enter your guess:" + nextGuess);
            String rslt = processGuess(nextGuess);
            System.out.println(rslt);
            if (rslt.equals(HS)) {
                min = nextGuess + 1;
                nextGuess = fuzzify(nextGuess + (max - nextGuess) / 2, min, max);
            }
            if (rslt.equals(LS)) {
                max = nextGuess - 1;
                nextGuess = fuzzify(nextGuess - (nextGuess - min) / 2, min, max);
            }
            if (rslt.equals(CS)) {
                System.out.println("Player 2 wins!");
                break;
            }
        }
    }
    int fuzzify(int i, int mn, int mx) {
        int fz = new Random().nextInt(3);
        if (fz == 1)
            return Math.max(mn, --i);
        if (fz == 2)
            return Math.min(mx, ++i);
        return i;
    }
}

सबसे पहले: यह भी संकलन नहीं करता है, क्योंकि जावा में कोई बहु-पंक्ति तार नहीं है। आप एक स्ट्रिंग के बीच में और काम करने के लिए लाइनों को तोड़ने की उम्मीद नहीं कर सकते।
जोए

ठीक है, मैंने इसे स्क्रीन पर अच्छा दिखने की कोशिश करना बंद कर दिया और बस सिंगल लाइन को चिपकाया।
जो ज़िटेलबर्गर

1
इसके अलावा (कोष्ठकों में बचत): वर्ग को एक अक्षर (40) के साथ नामित किया जा सकता है। वहाँ (80) अनावश्यक अनावश्यक व्हाट्सएप है। आप एक ही प्रकार के कई वेरिएबल्स की घोषणाओं को ध्वस्त कर सकते हैं, जैसे int a=5,b=10(34)। आप बचने के लिए खेतों this.(10) से अलग कंस्ट्रक्टर में तर्कों का नाम दे सकते हैं । आप Lपूरी तरह से समाप्त कर सकते हैं क्योंकि यह हमेशा 1(4) रहता है । आप के आरंभ को छोड़ सकते हैं Hऔर Gजो कंस्ट्रक्टर में वैसे भी सेट हो जाते हैं (6)। आप सभी चर और विधियों (235) के लिए एक-अक्षर के नाम का उपयोग कर सकते हैं।
जोए

सच है, लेकिन यह पूरी तरह से अपठनीय होगा। यह वह बिंदु है जहां मैं कोड-गोल्फ को वास्तव में कोड-गेंदबाजी करते हुए देखता हूं। लेकिन अगर मुझे कुछ समय मिलता है, तो मैं इसे आज रात को पॉलिश करूंगा।
जो ज़िटेलबर्गर

1
पिछले आंकड़े के लिए सुधार: (272)। आप fuzzifyसशर्त ऑपरेटर (20) का उपयोग करके फिर से लिख सकते हैं । आप इनलाइन सकते BufferedReaderमें getInt(19)। आप (48) में और String#matchesसे बचने के लिए उपयोग कर सकते हैं । आप सशर्त ऑपरेटर का भी उपयोग कर सकते हैं (30)। अब मैं 1953 की आपकी प्रारंभिक 133 की जगह नीचे हूँ।PatternMatchergetIntprocessGuess
जोए

2

अलार्म घड़ी रेडियो, 5756 बिट्स (2159 बाइट्स)

आप के पास एक अलार्म घड़ी के लिए जल्द ही आ रहा है! न्यूलाइन केवल पठनीयता के लिए हैं। ऑन-स्क्रीन शाब्दिक संख्यात्मक प्रदर्शन के स्थान पर कभी-कभी ASCII मूल्यों का उपयोग किया जाता है। चश्मा लगाता है। के लिए Aऔर डिफ़ॉल्ट का उपयोग करता है I। पहले इनपुट पर, अनुमान लगाने वाले के लिए NULL का उपयोग करें, अन्यथा आप संख्या निर्धारित करेंगे। PADSIZE 4 होना जरूरी है! 7-BIT और WRAP को अवश्य होना चाहिए! ट्यूरिंग-पूर्ण! आउटपुट higher, lower, correct, you won, और you lost

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

1

रूबी 1.9 (298)

b=->f{puts "> "+f;gets}
a=->f{b[f].to_i}
q=a["Player 1 or 2?"]
i,j,g=100,1
n=q<2?a["Enter number:"]:rand(i)+j
5.times{q<2?(g=j+(i-j)/2
c=b["Guessing, #{g}"]
c[0]==?c?break: c[0]==?h?j=g :i=g):(
g=a["Guess:"]
puts g==n ?"correct":g<n ?"higher":"lower"
g==n&&break)}
puts "Player #{g==n ?2:1} won!"

हालांकि बहुत अनुकूल निर्देश नहीं।


बहुत अच्छा! यदि केवल आप कुछ यादृच्छिक था जब एआई खिलाड़ी 2 है ...
इक्विक्स

@ बारहवीं, 30 चर से पीटा।
zzzzBov

1

मैंने जावा को कुछ न्याय करने की आवश्यकता महसूस की। :)

जावा - ४ Java६ ४३ - ४२१ ४१४

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

थोड़ा अनगढ़

import java.util.*;

class a{

    static<T>void p(T p){
        System.out.println(p);
    }

    static int i(){
        return new Scanner(System.in).nextInt();
    }

    public static void main(String[]a){
        int c,g,f=101,i=0;
        p("Pick (1) or guess (2)?");
        c=i();
        if(c==1)p("Pick a number (1-100)");
        g=c==1?i():new Random().nextInt(100);
        while(f!=g&&i++<5){
            p("Guess:");
            f=c==2?i():f>g?f/2:f+f/2;
            if(c==1)p(f);
            p(f>g?"lower":"higher");
        }
        if(f==g)p("correct");
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.