আলকের সবচেয়ে সংক্ষিপ্ত খেলাটি লিখুন


10

অলক গণিতবিদ একে ডিডডনির দ্বারা উদ্ভাবিত হয়েছিল এবং তাঁর ১৯৮৪ সালের প্লানিয়েভারস বইটিতে বর্ণনা করেছিলেন। আলকের বিধিগুলি সহজ:

আলাক দ্বি-খেলোয়াড়ের খেলা যা এক-মাত্রিক বোর্ডে এগারোটি স্লট নিয়ে খেলা হয়। প্রতিটি স্লট একবারে সর্বাধিক এক টুকরো ধরে রাখতে পারে। দুটি ধরণের টুকরো রয়েছে, "এক্স" এবং "ও"। এক্স একটি প্লেয়ারের, অন্যের সাথে সম্পর্কিত। বোর্ডের প্রাথমিক কনফিগারেশনটি হ'ল:

      xxxx___oooo

খেলোয়াড়রা চলন্ত মোড় নেয়। প্রতিটি ঘুরে, প্রতিটি প্লেয়ার একবারে একবারে এক টুকরো স্থানান্তর করতে পারে। একজন খেলোয়াড় তার পালা পেরিয়ে যেতে পারে না। একজন খেলোয়াড় তার যে কোনও একটি টুকরোটি পরের অনিবন্ধিত স্লটে তার ডান বা বাম দিকে নিয়ে যেতে পারেন, এতে অধিষ্ঠিত স্লটগুলির উপরে ঝাঁপ দেওয়া জড়িত থাকতে পারে। কোনও প্লেয়ার বোর্ডের পাশ থেকে কোনও অংশ টানতে পারবেন না।

যদি কোনও পদক্ষেপ মুভির রঙের দুই টুকরো (কোনও হস্তক্ষেপহীন শূন্য ফাঁকা স্লট ছাড়াই) উভয় পাশে প্রতিপক্ষের টুকরোকে ঘিরে থাকে এমন একটি প্যাটার্ন তৈরি করে, তবে সেই চারপাশের টুকরোগুলি বোর্ড থেকে সরানো হবে।

গেমের লক্ষ্য হ'ল আপনার প্রতিপক্ষের সমস্ত টুকরো মুছে ফেলা, যেখানে গেমটি শেষ হয়। সমস্ত কিছু বাদ দিয়ে খেলাটিও শেষ হয়, কারণ প্রতিপক্ষ আপনাকে এক টুকরো দিয়ে ঘিরে রাখতে পারে না, এবং যাইহোক সর্বদা কয়েকটি পদক্ষেপের মধ্যে হেরে যাবে।

আমি এই গেমটি অনলাইনে পেয়েছি এবং ভাবছিলাম: এটি গল্ফ করা যায়?

গল্ফের বিধি

  • আপনার কোডটি অবশ্যই গেমের সমস্ত নিয়ম অনুসরণ করতে হবে, ক্যাপচারগুলি পরিচালনা করতে হবে, যথাযথ চলমান ইত্যাদি ((কেবলমাত্র ব্যতিক্রম আপনাকে কোনও বট যোগ করতে হবে না তবে আপনার উভয় খেলোয়াড়কে অবশ্যই কোনওরকম নিয়ন্ত্রণ করতে হবে এবং একজন খেলোয়াড় অবশ্যই মানব হতে হবে)।
  • ইনপুট অবশ্যই টাইল এক্স এ টাইল ওয়াই করতে হবে, বা প্রস্থান করতে হবে। উদাহরণস্বরূপ, আপনি 1 4'এই টুকরো টাইল 1 এ টাইল 4 এ সরান' বলতে ব্যবহার করতে পারেন । quitপ্রোগ্রাম শেষ হয়ে যাবে, যদিও ব্যবহার Control- Cগ্রহণযোগ্য হতে পারে। আপনার কোনও পদক্ষেপ অবৈধ কিনা তাও পরীক্ষা করতে হবে (বোর্ডের বাইরে গিয়ে বা কোথাও চলে গিয়ে যে আপনাকে টাইলসের জুড়ি নয় এমন কোনও বার্তা পৌঁছাতে বা অনাবৃত জায়গা পেরিয়ে যেতে হবে quit)।
  • বিজয়ী খেলোয়াড়দের এবং অবৈধ জন্য আউটপুট হওয়া আবশ্যক P1 WINS, P2 WINSআর INVALIDযথাক্রমে। (এগুলির সবগুলিই 7 টি অক্ষর))
  • আউটপুট অবশ্যই বোর্ড দেখাতে হবে। এটাই দরকার।
  • আপনি সংখ্যাযুক্ত টাইলস বা অন্যান্য টুকরাগুলির মতো কোনও এইডগুলি ব্যবহার করেন কিনা তা বিবেচ্য নয়।
  • চ্যালেঞ্জটি যদি শেষ হয়:

    • একটি উত্তর 50 টি ভোট পায়
    • একটি উত্তর 3 সপ্তাহের জন্য সর্বোচ্চ ভোট দিয়েছে, এবং অন্য কোনও উত্তর সে সময়ে পোস্ট করা হয়নি

এবং চ্যালেঞ্জটির কমপক্ষে 3 টি উত্তর রয়েছে (সুতরাং কিছু বাস্তব প্রতিযোগিতা রয়েছে)।

খেলার নিয়ম

  • বাম দিকের প্লেয়ারটি প্রথমে শুরু করতে হবে।
  • একবারে কেবল একটি টুকরো একটি স্কোয়ার দখল করে। আপনি টুকরোটি বাম বা ডানদিকে সরিয়ে নিন যতক্ষণ না এটি অনাবৃত স্থানকে আঘাত করে। বোর্ডটি মোড়ানো হয় না, এবং আপনি অনাবৃত অঞ্চলগুলির মধ্য দিয়ে যেতে পারবেন না। উদাহরণ স্বরূপ:
    • xoo__o। এখানে, xডানে চলন্ত বোর্ডে পরিবর্তন করবে _oox_o
    • xxooo_। এখানে, সুদূরতম-বাম xউত্পাদ সরাতে পারে _xooox, যা ধারন করে o, এস যাব _x___x
    • x__oox। এখানে, oগুলি ক্যাপচার করা হয়নি (এখনও একটি ফাঁক আছে)। ক্যাপচার সম্ভব নয় কারণ আপনি অনাবৃত স্থানের মধ্য দিয়ে যেতে পারবেন না। xবাম শুধুমাত্র একটি স্থান সরানো যায়নি, কারণ তার মাঝে অন্য কোন টুকরা হয় (যাব _x_oox)।
  • গ্রুপটি প্রতিপক্ষের টুকরো দ্বারা ঘিরে থাকলে এক সাথে একাধিক সংলগ্ন টুকরো ধরা পড়তে পারে captured থেকে যেমন x_ooxকরতে _xooxউভয় ক্যাপচার করবে os এবং ফলস্বরূপ _x__x
  • যদি কোনও পদক্ষেপ নেওয়ার পরে, আপনি প্রথমে প্রতিপক্ষের টুকরোগুলি ক্যাপচার করুন , আপনার নিজের টুকরোটি সরানো উচিত কিনা তা পরীক্ষা করার আগে। দুটি উদাহরণ নিন:
    • o_oxxto oxox_। প্রথম, দ্বিতীয়টি oধরা পড়ে ox_x_, তাই প্রথম xবোর্ডে থাকে।
    • o_ooxto oxoo_। এবার os এর কোনওটিই ক্যাপচার করা হয়নি, তাই xপরিবর্তে এটি ক্যাপচার করা হয়েছে।
    • আপনার যদি কেবল একটি টুকরা থাকে তবে গেমটি শেষ হবে কারণ আপনি কেবল একটি টুকরো দিয়ে ক্যাপচার করতে পারবেন না।

খেলা শুরু করা যাক! আপনি কী নিয়ে এসেছেন তা দেখার অপেক্ষায় রয়েছি।


মন্তব্যগুলি অপ্রচলিত হওয়ায় তারা মুছে ফেলা হয়েছে। মুছে ফেলা উচিত এমন কোনও মন্তব্য সম্পর্কে আমাকে জানান।
Doorknob

উত্তর:


9

সি, 617 592 বাইট

#define O(x)(x-'x'?'x':'o')
q,f,t,k,i,x=4,o=4,*d;main(){char*A,Q[9],c='x',b[]="xxxx___oooo";printf(b);while(!q){scanf(" %8[^\n]%*[^\n]",Q);if(!strcmp(Q,"quit"))break;f=*Q>47&&*Q<58?atoi(Q):-1;A=f>9?Q+2:Q+1;t=*A==32&&A[1]>47&&A[1]<58?atoi(A+1):-1;i=t==f&&t<0&&f<0?1:0;for(k=f;k!=t;k+=(t-f)/abs(t-f))if(b[k]==95||b[t]-95||b[f]-c)i=1;if(i){printf("INVALID");continue;}b[t]=c;b[f]=95;for(t=0;t<2;t++){d=c-'x'?&o:&x;for(k=1;k<11;k++)if(b[k]==O(c)){for(i=k+1;b[i]==O(c)&&b[i];i++);if(b[i]==c&&b[k-1]==c)while(k<i)b[k++]=95,(*d)--;}c=t?c:O(c);}printf(b);if(o<2||x<2)printf("P%d WINS",(x>1)+1),q=1;}}

উন্মোচন:

#define O(x)(x-'x'?'x':'o')
q,f,t,k,i,x=4,o=4,*d;
main(){
    char*A,Q[9],c='x',b[]="xxxx___oooo";
    printf(b);
    while(!q){
        scanf(" %8[^\n]%*[^\n]",Q);
        if(!strcmp(Q,"quit"))break;
        f=*Q>47&&*Q<58?atoi(Q):-1;
        A=f>9?Q+2:Q+1;
        t=*A==32&&A[1]>47&&A[1]<58?atoi(A+1):-1;
        i=t==f&&t<0&&f<0?1:0;
        for(k=f;k!=t;k+=(t-f)/abs(t-f))
            if(b[k]==95||b[t]-95||b[f]-c)
                i=1;
        if(i){
            printf("INVALID");
            continue;
        }
        b[t]=c;
        b[f]=95;
        for(t=0;t<2;t++){
            d=c-'x'?&o:&x;
            for(k=1;k<11;k++)
                if(b[k]==O(c)){
                    for(i=k+1;b[i]==O(c)&&b[i];i++);
                    if(b[i]==c&&b[k-1]==c)
                        while(k<i)b[k++]=95,(*d)--;
                }
            c=t?c:O(c);
        }
        printf(b);
        if(o<2||x<2)printf("P%d WINS",(x>1)+1),q=1;
    }
}

আমি সত্যিই এটি একটি 400 ডলার বাইটে পেতে চেয়েছিলাম, তবে এখানে খুব সামান্য নিয়ম রয়েছে এবং ইনপুট প্রক্রিয়াজাতকরণটি বেশ খারাপ হয়ে গেছে। আমি অবশ্যই এটি দিয়ে না। এখানে নমুনা রানগুলির একটি সেট যা প্রায় সব কিছু জুড়ে:

xxxx___oooo0 4
_xxxx__oooo7 6
_xxxx_o_ooo4 5
_xxx_xo_ooo8 6
INVALID8 7
_xxx_xoo_oo3 4
_xx_xxoo_oo7 3
_xxo__o__oo1 4
__x_x_o__oo10 9
INVALID10 8
__x_x_o_oo_2 3
___xx_o_oo_6 5
___xxo__oo_6 6
INVALID5 5
INVALID3 6
____x_x_oo_8 7
____x_xo_o_6 8
____x__o_o_P2 WINS

xxxx___oooo0 4
_xxxx__oooo10 6
_xxxx_oooo_1 5
__xxxxoooo_9 1
_o____ooo__P2 WINS

xxxx___oooo0 4
_xxxx__oooo7 6
_xxxx_o_ooo1 5
__xxxxo_ooo10 7
__xxxxoooo_2 10
___xxx____xP1 WINS

xxxx___oooo3 4
xxx_x__ooooquits
INVALIDtestme
INVALID3*4
INVALID3 four
INVALIDthree four
INVALIDthisstringislongerthanmybuffer
INVALID10 0
INVALID4 5
INVALID7 6
xxx_x_o_oooquit

আমি যদি কিছু ভুল ব্যাখ্যা করে থাকে তবে দয়া করে আমাকে জানান!


আমি এটি পরীক্ষা করেছি, এটি ভাল কাজ করে, এবং কিছুই বাদ যায়নি। ভাল করেছ!
এসসিআইথেনানসী

আপনি প্রতিস্থাপন কয়েক বাইট সংরক্ষণ করতে পারবেন printf("INVALID");সঙ্গে puts("INVALID");, o<2||x<2সঙ্গে o<2|x<2এবং printf(b);while(!q){সঙ্গেfor(printf(b);!q;){
es1024

3

পিএইচপি - 505

<?php
$s="xxxx___ooo".$y=o;$x=x;$c=function($m)use(&$x){return$x.str_repeat('_',strlen($m[1])).$x;};$e='$s=preg_replace_callback("~$x($y+)$x~",$c,$s);';$_=substr_count;while(true){echo$s;if($_($s,x)<2)die("P2 WINS");if($_($s,o)<2)die("P1 WINS");$i=trim(fgets(STDIN));if($i=='quit')die;if(!preg_match('!^(\d+) (\d+)$!',$i,$m)||$s[$f=$m[1]]!=$x||$s[$t=$m[2]]!="_"||(0&($a=min($f,$t))&$b=max($f,$t))||$_($s,"_",$a,($b-$a)+1)>1)echo"INVALID\n";else{$s[$f]='_';$s[$t]=$x;eval($e);$z=$x;$x=$y;$y=$z;eval($e);}}

পুনর্নির্দেশের মাধ্যমে নোটিশগুলি দমন STDERRকরতে হবে /dev/null

বুদ্ধিমান হোয়াইটস্পেস সহ:

<?php
@$s = "xxxx___ooo".($y = o);
@$x = x;
$c = function($m)usea(&$x){
    return$x.str_repeat('_',strlen($m[1])).$x;
};
$e = '$s=preg_replace_callback("~$x($y+)$x~",$c,$s);';
@$_ = substr_count;
while (true){
    echo $s;

    if (@$_($s,x) < 2) die("P2 WINS");
    if (@$_($s,o) < 2) die("P1 WINS");

    $i = trim(fgets(STDIN));
    if($i == 'quit') die;

    if( !preg_match('!^(\d+) (\d+)$!',$i,$m)
    ||   $s[$f = $m[1]] != $x
    ||  @$s[$t = $m[2]] != "_"
    ||  (0 & ($a = min($f, $t)) & $b = max($f, $t))
    ||  $_($s, "_", $a, ($b - $a) + 1) > 1
    ) echo "INVALID\n";
    else {
        $s[$f] = '_';
        $s[$t] = $x;
        eval($e);
        $z = $x;
        $x = $y;
        $y = $z;
        eval($e);
    }
}

ব্রেনস্টিলের পরীক্ষার ক্ষেত্রে:

xxxx___oooo0 4
_xxxx__oooo7 6
_xxxx_o_ooo4 5
_xxx_xo_ooo8 6
INVALID
_xxx_xo_ooo8 7
_xxx_xoo_oo3 4
_xx_xxoo_oo7 3
_xxo__o__oo1 4
__x_x_o__oo10 9
INVALID
__x_x_o__oo10 8
__x_x_o_oo_2 3
___xx_o_oo_6 5
___xxo__oo_6 6
INVALID
___xxo__oo_5 5
INVALID
___xxo__oo_3 6
____x_x_oo_8 7
____x_xo_o_6 8
____x__o_o_P2 WINS

xxxx___oooo0 4
_xxxx__oooo10 6
_xxxx_oooo_1 5
__xxxxoooo_9 1
_o____ooo__P2 WINS

xxxx___oooo0 4
_xxxx__oooo7 6
_xxxx_o_ooo1 5
__xxxxo_ooo10 7
__xxxxoooo_2 10
___xxx____xP1 WINS

xxxx___oooo3 4
xxx_x__ooooquits
INVALID
xxx_x__ooootestme
INVALID
xxx_x__oooo3*4
INVALID
xxx_x__oooo3 four
INVALID
xxx_x__oooothree four
INVALID
xxx_x__oooothisstringislongerthanmybuffer
INVALID
xxx_x__oooo10 0
INVALID
xxx_x__oooo4 5
INVALID
xxx_x__oooo7 6
xxx_x_o_oooquit

'নোটিশ / সতর্কতা' বলতে কী বোঝ?
ASCIIThenANSI

@ এএসসিথেনানসী অব্যক্ত চরিত্রের অক্ষরের কারণে সতর্কতা: পিএইচপি বিজ্ঞপ্তি: 2t /tmp/pcg-48388.php এ অপরিজ্ঞাত ধ্রুবক ও - অনুমান 'ও' ব্যবহার করুন One
টিমওয়ালা

যে প্রোগ্রাম ভাঙ্গা না?
ASCIIThenANSI

@ এ্যাসিআইথেনানসি না, এটি তাদের পক্ষে পুনঃনির্দেশিত করা ঠিক কাজ করে /dev/null
টিমওয়োল্লা

তারপরে এটি ঠিক আছে যতক্ষণ না প্রোগ্রামটি যথাযথভাবে চলতে থাকে এবং সেগুলিতে পুনঃনির্দেশিত হয় /dev/null
ASCIIThenANSI

1

পাইথন 2, 536 509 448 441 বাইট

মাধ্যমে কল করুন a(); পদক্ষেপগুলি piece,destination(যেমন, 1,4) আকারে প্রবেশ করতে হবে ; Ctrl-C দিয়ে প্রস্থান করুন। যদি কেউ আরও গল্ফিংয়ের সম্ভাবনা দেখতে পায় তবে আমি সবাই কান।

b,r,x='_',lambda p:''.join([p[i]for i in x]),range(11)
def a(m='xo'):
 t=w=0;p=dict(zip(x,'xxxx___oooo'))
 while w<1:
    print r(p);y=m[t%2]
    try:
     s,v=input();1/all([y==p[s],{v}<{r(p).rfind(b,0,s),r(p).find(b,s)},v-s]);p[s],p[v],h,c=b,y,0,{}  
     for _ in y,m[-~t%2]:
        for i in p:exec{_:"h=1;p.update(c)",b:"h,c=0,{}"}.get(p[i],h*"c[i]=b")
     w=min(map(r(p).count,m))<2;t+=1
    except:print"INVALID"
 print"P%d WINS"%-~(r(p).count('o')<2)

1

স্পেসবিএএস - 718 বাইট

স্পেসবিএএস হ'ল সিনক্লেয়ার / জেডএক্স বেসিকের একটি আপডেট সংস্করণ যা কোনও এমুলেটরের বাইরে চলতে পারে। (তবুও ব্যাখ্যা করা হয়েছে)।

আকারটি যতটা সম্ভব হ্রাস করতে নতুন কিছু বৈশিষ্ট্য ব্যবহার করেছি।

লাইন 12 ইনলাইন আইএফ ব্যবহার করে "স্যান্ডউইচড" টুকরোগুলি অনুসন্ধানের জন্য একটি রেজেক্স সেট আপ করে এবং লাইন 18 আইএনসি-র প্রকৃতির চারপাশে মোড়কে ব্যবহার করে (বলার অপেক্ষা রাখে না INC p: IF p=3 THEN LET p=1)

1 LET b$="xxxx---oooo": LET p=1: LET c$="xo": DIM s=4,4
2 LET v=0: PRINT b$'"[";p;"] ";
3 INPUT m$: IF m$(1)="Q" THEN PRINT "QUIT": STOP 
4 LET f=VAL(ITEM$(m$,1," ")): LET t=VAL(ITEM$(m$,2," ")): PRINT f;" ";t
5 IF (f<1 OR f>11) OR (t<1 OR t>11) THEN LET v=1: GO TO 10
6 IF (b$(f)<>c$(p)) OR b$(t)<>"-" THEN LET v=1: GO TO 10
7 FOR i=f TO t STEP SGN(t-f)
8 IF b$(i)="-" THEN IF i<>t THEN LET v=1
9 NEXT i
10 IF v=1 THEN PRINT "INVALID": GO TO 2
11 LET b$(t)=b$(f): LET b$(f)="-"
12 LET r$=IIF$(p=1,"xo+x","ox+o")
13 LET m=MATCH(r$,b$): IF m=0 THEN GO TO 18
14 FOR i=m+1 TO POS(c$(p),b$,m+2)
15 IF b$(i)=c$(3-p) THEN LET b$(i)="-": DEC s(3-p): END IF
16 NEXT i
17 IF s(3-p)<2 THEN PRINT b$'"P";p;" WINS": STOP 
18 INC p,1 TO 2
19 GO TO 2

আউটপুট (আউটপুট বিধবা থেকে অনুলিপি করতে পারে না, তাই স্ক্রিন শট) এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন


0

সি #, 730 বাইট

using System;using System.Linq;class P{static void Main(string[]z){int p=1,d,e,g,x,y;var b=new[]{3,1,1,1,1,0,0,0,2,2,2,2};var o=new[]{"_","x","o"};Action<string>h=s=>{Console.Write(s,p);Environment.Exit(0);};Action i=()=>h("INVALID");Func<int,int,bool>j=(q,r)=>b.Select((v,w)=>w<=q||w>=r||v>0?0:w).Any(w=>w>0);Action<int>k=m=>{e=0;for(d=1;d<12;d++){if(b[d]==m){if(e>0&&!j(e,d))for(g=e+1;g<d;g++)b[g]=0;e=d;}}if(b.Count(w=>w>0&&w!=m)<3)h("P{0} WINS");};try{for(;;){for(g=1;g<12;g++)Console.Write(o[b[g]]);var n=Console.ReadLine();if(n=="quit")h("");var c=n.Split(' ');x=int.Parse(c[0]);y=int.Parse(c[1]);if(c.Length>2||b[x]!=p||b[y]!=0||(p>1?y:x)>=(p>1?x:y)||j(x<y?x:y,x<y?y:x))i();b[x]=0;b[y]=p;k(p);p=p>1?1:2;k(p);}}catch{i();}}}

আমি ধারণা করি যে আরও উন্নতি সম্ভব। অন্যদিকে, আমি INVALIDআউটপুটটিকে শেষের নির্বাহ হিসাবে ব্যাখ্যা করেছিলাম , সুতরাং অন্যান্য উত্তরগুলির সাথে সমতা রাখার জন্য আমাকে এই সমস্যাটি ঠিক করতে হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.