সংখ্যাটি অনুমান করুন


10

বিবরণ

একটি সম্পূর্ণ কার্যকারী "সংখ্যাটি অনুমান করুন" গেমটি তৈরি করুন। গেমটি দু'জন খেলোয়াড় নিম্নলিখিতভাবে খেলেছেন:

  1. খেলোয়াড় 1 এবং N এর মধ্যে একটি (A) নম্বর পছন্দ করে
  2. খেলোয়াড় দুজন অনুমান করার চেষ্টা করে একটি একই পরিসরে একটি নম্বর (বি) বেছে নেওয়া
  3. প্রথম খেলোয়াড় "উচ্চতর" if A > B , "নিম্ন" if A < B বা "সঠিক" প্রতিক্রিয়া জানায় if A = B
  4. ধাপ 2-3 পুনরাবৃত্ত হয় আমি সময় বা পর্যন্ত "সঠিক" প্রতিক্রিয়া হয়।
  5. যদি "সঠিক" শোনা যায়, খেলোয়াড় দুটি জয় অন্যথায় সে হেরে যায়।

চশমা

বৈধ প্রবেশের জন্য ন্যূনতম চশমা:

  • ব্যবহারকারী খেলোয়াড়ের একজন বা দুজন খেলোয়াড় হিসাবে খেলতে পারেন।
  • কম্পিউটার অন্যান্য ভূমিকা পালন করে।
  • খেলোয়াড়ের খেলোয়াড় হিসাবে খেলতে কম্পিউটারকে অবশ্যই সংখ্যাটি অনুমান করার চেষ্টা করতে হবে (সুতরাং, প্রদত্ত ডেটার বিরুদ্ধে অনুমান করা বা প্রদত্ত ডেটা উপেক্ষা করা প্রতারণা করছে)
  • এন = 100 বা ব্যবহারকারীর দ্বারা ইনপুট (আপনার পছন্দ)
  • আই = 5 বা ব্যবহারকারীর দ্বারা ইনপুট (আপনার পছন্দ)
  • প্রোগ্রাম অবশ্যই বিজয়ী শেষে ঘোষণা করতে হবে।
  • প্রতিটি পদক্ষেপে কী করবেন তার পূর্ণ মানব পাঠযোগ্য নির্দেশাবলী (যেমন "খেলোয়াড় হিসাবে একজন খেলুন বা দুজন খেলোয়াড়?" , "অন্য অনুমান লিখুন:" , ইত্যাদি) - এটিকে বাদ দিয়ে যান না; শুধু সহজ রাখুন।

জয়ের শর্ত

সেই জন্য:

  1. সর্বোচ্চ এন্ট্রি জয়ী ভোট যদি এটা অন্তত 3 ভোট দ্বিতীয় সর্বোচ্চ এন্ট্রি ভোট এগিয়ে আছে।
  2. স্বল্পতম এন্ট্রি জয়।

আমি স্পষ্টভাবে পড়িনি যে আমাদের সেইটিতে একটি এআই প্রয়োজন। আপনি উভয় খেলোয়াড়ই মানব কিনা তা নিশ্চিত করতে পারবেন?
জেবি

@ জেবি: এটির জন্য দুঃখিত: / আপনার একটি এআই দরকার নেই। আমি এখনই প্রশ্ন আপডেট করছি ...
এভেলেক্স

2
আমি মনে করি প্রতিটি পদক্ষেপের জন্য নির্দেশ পাঠ্য দেওয়া উচিত, অন্যথায় উত্তরগুলির তুলনা করা শক্ত।
জোয়

@Joey নিশ্চিতভাবে
সাইমন টথ

ব্যবহারকারীর ইনপুট বৈধতা কি গুরুত্বপূর্ণ?
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) অসম্পূর্ণ।
  • 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যাতে কোনও বিরতির প্রয়োজন হয় না ever
  • 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

আসলে, বিশ্বব্যাপী ওয়েবের অস্তিত্বের আগে আমি এটি লিখেছিলাম। ১৯৮০ এর দশকে, যেমন টিআরএস -৮০ দশকে অপ্রাসঙ্গিক হয়ে উঠছিল।

এটি "ওয়ান-লাইনার" - এটি বেসিকের একক লাইনে থাকা সবচেয়ে আকর্ষণীয় প্রোগ্রামের সাথে মানিয়ে নেওয়ার একটি প্রচেষ্টা। এটি আমার প্রথম ওয়ান-লাইনার ছিল এবং মারাত্মকভাবে চিত্তাকর্ষক নয়। (সেখানে কিছু আশ্চর্যজনক এক-লাইনার ভেসে উঠেছে))

টিআরএস -80 বেসিকের একটি লাইন 255 টি অক্ষরের মধ্যে সীমাবদ্ধ ছিল, ওভারহেডের জন্য বিয়োগ বিয়োগ দম্পতি। যদিও আপনি মাঝে মাঝে এটি অতিক্রম করতে পারতেন, যেহেতু টোকেনাইজেশনের পরে সত্য সীমাটি 255 বাইট ছিল - তবে সম্পাদক টোকেনাইজেশনের আগে 255 টির বেশি অক্ষরের একটি রেখাও কেটে ফেলত এবং আক্ষরিক নিয়ন্ত্রণ অক্ষর সন্নিবেশ করার জন্য আপনাকে লাইন সম্পাদকটিতে কৌশলগুলি ব্যবহার করতে হবে আপনার স্ট্রিং মধ্যে newlines মত।

এবং হ্যাঁ, স্পষ্ট করে বলার জন্য, তালিকার সেই লাইন ব্রেকগুলি আক্ষরিক নিউলাইন অক্ষর। (এগুলি আপনার কোড এ পেতে আপনার লাইনটি ইনগ করার Cসময় হ্যাং কমান্ডটি ব্যবহার করতে হবে EDITA মোট ব্যথা, তবে +CHR$(13)একটির সাথে আট বা তার বেশি অক্ষর প্রতিস্থাপন করা ভাল worth )

অভিশাপ, আমি দীর্ঘদিন ধরে গল্ফ করছিলাম।


6

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

আরও পাঠযোগ্য আকারে In

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

ভাল, আমি সম্পূর্ণ সি জানি না, তবে আপনি দয়া করে ব্যাখ্যা করতে পারেন যে কোনও প্রকারের নির্দিষ্টকরণকারী সংকলন ছাড়াই ভেরিয়েবলগুলির সাথে একটি প্রোগ্রাম কীভাবে হয়?
মাকজেড

নির্দিষ্ট ধরণের কোনও ভেরিয়েবল একটি পূর্ণসংখ্যা
ইথিরেরিক

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

Minified (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 জন প্লেয়ার সঠিকভাবে? কমপক্ষে আমি এআইয়ের জন্য কোনও সংখ্যার অনুমান করার কোড এবং প্লেয়ারকে »উচ্চতর», »নিম্ন« বা »সঠিক« কোথাও প্রবেশ করার জন্য কোডটি দেখতে পাচ্ছি না
জোয়ি

@ জোয়ি, আমার ধারণা ছিল যে কোনও মানব খেলোয়াড় যদি আগে যায় তবে তাদের কেবল একটি সংখ্যা বাছাই করতে হবে। আমি অনুমান করি যে কেন একজন মানব খেলোয়াড় উচ্চতর, নিম্ন এবং সঠিকটি বেছে নিবে on
নিচ্ছে

১ এবং ২ খেলোয়াড়ের জন্য কেবল নির্দেশাবলী অনুসরণ করুন তার মধ্যে একটি হলেন একজন মানুষ, অন্যটি কম্পিউটার। যদিও প্রোটোকলে কোনও পার্থক্য নেই though দুটি বাক্য খেলোয়াড় হিসাবে খেলতে কম্পিউটারকে অবশ্যই সংখ্যাটি অনুমান করার চেষ্টা করতে হবে - এই বাক্যটি খুব ইঙ্গিত দেয় যে কম্পিউটারটি একটি নম্বর অনুমান করতে হবে।
জোয়

3

পাইথন 2.7 334 335 327 314 300 অক্ষর (আমার প্রথমবার গল্ফিং)

(335) নতুন লাইন এড়াতে ভুলে গেছেন।

(327) র্যান্ডেন্টের জন্য 100 রিডানডেন্ট সরানো হয়েছে। পুরো স্ট্রিংয়ের পরিবর্তে প্রতিক্রিয়ার প্রথম অক্ষরের তুলনা।

(314) আপডেট করা মুদ্রণ কে জিতল।

(300) প্লেয়ার 1 প্লেয়ার থাকাকালীন পরিবর্তিত: কম্পিউটার হিসাবে সংখ্যার অনুমান পরিবর্তন করা

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"

এখানে নো-এআই সংস্করণ।


আমি বুঝতে পারি এটি একটি পুরানো উত্তর, তবে আমি এটির পিছনে কখনই জানতাম না এবং আমি কেবল এটিকে হোঁচট খেয়েছি - আপনি সম্ভবত 1, 2, 3, ইত্যাদির মতো সংক্ষিপ্ত রেখার সংখ্যা ব্যবহার করতে পারেন, বা কেবল কিউবিসিক / ফ্রিবাসিকের মতো কিছু ধরে নিতে পারেন এবং এগুলি পুরোপুরি বাদ দিন।
nyuszika7h

@ nyuszika7h কোড গল্ফের চেয়ে এটি জনপ্রিয়তার প্রতিযোগিতা,
জেবি

এটাই? ভাল, এটি ট্যাগ code-golf
nyuszika7h

সুনির্দিষ্ট এবং স্পষ্ট (এবং লম্পট, আইএমএইচও) জয়ের শর্ত সহ।
জেবি

ওহ ঠিক আছে, আমি এটি দেখেছি কিন্তু এটি ভুলে গেছি।
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 এ কেবল পরীক্ষা করেছি, তাই আমি জানি না যে আমি কিছু কাজ ধারাবাহিকভাবে কাজ করছি কিনা, বিশেষত একটি wpফাংশনটির ডিফল্ট মান হিসাবে নাএএন হিসাবে পার্স করা একটি অবৈধ ইনপুটকে কোলেস করে কিনা I

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)। আপনি ব্যবহার করতে পারেন String#matchesএড়াতে Patternএবং MatchergetInt(48)। আপনি শর্তসাপেক্ষ অপারেটরটিও ব্যবহার করতে পারেন processGuess(30)। আমি এখন আপনার প্রাথমিক 1953 এর পরিবর্তে 1360-
জোয়ি

2

অ্যালার্ম ক্লক রেডিও, 5756 বিট (2159 বাইট)

আপনার নিকটে একটি অ্যালার্ম ঘড়িতে শীঘ্রই আসছে! নিউলাইনগুলি কেবল পঠনযোগ্যতার জন্য। আক্ষরিক সংখ্যার প্রদর্শন অন-স্ক্রিনের জায়গায় মাঝে মাঝে ASCII মানগুলি ব্যবহৃত হয়। চশমা ফিট। ডিফল্ট-ব্যবহার Aএবং I। প্রথম ইনপুটটিতে, অনুগ্রহক হিসাবে নুল ব্যবহার করুন, অন্যথায় আপনি নম্বরটি সেট করবেন। প্যাডিজ করা 4 হতে হবে! সেলগুলি 7-বিট এবং মোড়ক হওয়া আবশ্যক! টুরিং-সম্পূর্ণ! আউটপুট higher, lower, correct, you won, এবং you lost

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

1

রুবি ১.৯ (২৯৮)

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

আমি জাভা কিছু ন্যায়বিচার করার প্রয়োজন অনুভব করেছি। :)

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

খানিকটা উজ্জ্বল

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");
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.