অর্ডার এবং বিশৃঙ্খলা এবং কোডগল্ফ


10

অর্ডার এবং কেওস একটি 6x6 বোর্ডে খেলা টিকি-টাক-টোয়ের একটি বৈকল্পিক। গেমটি কী অনন্য করে তোলে তা হ'ল উভয় খেলোয়াড়ই একটি এক্স বা হে রাখে! প্রতিটি পালা (অর্ডার দিয়ে শুরু), কোনও খেলোয়াড় যে কোনও অনাবৃত স্কোয়ারে একটি এক্স বা হে রাখে।
জেতা সহজ। বোর্ডে একটি সারিতে 5 এক্স বা ওস (উল্লম্বভাবে, অনুভূমিকভাবে, বা ত্রিভুজযুক্ত) থাকলে অর্ডার জিতবে। বোর্ড ভরাট হলে বোর্ডে 5 এক্স বা ওসের কোনও স্ট্রিং না থাকলে বিশৃঙ্খলা জিতে যায়। আপনার কাজ? ঠিক আছে, যেহেতু এটি প্রোগ্রামিং ধাঁধা এবং কোড গল্ফ, আপনি গেমটি প্রোগ্রাম করতে যাচ্ছেন এবং এটি গল্ফ করছেন।

নিয়ম

  • আপনাকে অবশ্যই x y tকোথায় xএবং yস্থানাঙ্ক হিসাবে ইনপুট গ্রহণ করতে হবে এবং tএটি হ'ল টাইল ( Xবা O) type স্থানাঙ্কগুলি 0 0উপরের-বাম কোণে শুরু হয় এবং উপরে 5 5(নীচের-ডান কোণে) পর্যন্ত বৃদ্ধি পায় ।
  • আপনাকে অবশ্যই qপ্রস্থান করতে হবে এবং মুদ্রণ করতে হবে INVALIDযদি ব্যবহারকারী অবৈধ স্থানাঙ্ক, টাইলস, কোনও ইনপুট আকারে না প্রবেশ করে x y tবা একটি টাইল স্থাপন করার চেষ্টা করে যেখানে সেখানে ইতিমধ্যে রয়েছে। (একমাত্র ব্যতিক্রম হ'ল qএটি প্রোগ্রামটি ছাড়বে))
  • অর্ডার জিতলে, আপনি আউটপুট পাবেন P1 WINS। কেওস জিতলে, আপনি আউটপুট পাবেন P2 WINS
  • অর্ডার আগে যেতে হবে।
  • একটি ফাঁকা স্থান দ্বারা প্রতিনিধিত্ব করা হয় .
  • টাইলস হ'ল Xএবং O(বড় হাতের অক্ষর)। আপনাকে ছোট হাতের জিনিস গ্রহণ করতে হবে না, তবে বড় হাতের অক্ষর প্রয়োজন।
  • আপনার বোর্ডটি অবশ্যই গঠিত হবে .XO
  • আপনি আসলে উভয় খেলোয়াড়কে গেমটি খেলছেন তা অনুকরণ করছেন, বোর্ড দেওয়া হচ্ছে না এবং কে জিতবে তা পরীক্ষা করছেন। এটি কোনও চালক জিত না হওয়া অবধি ইনপুট হিসাবে কোনও পদক্ষেপ গ্রহণ করে, তারপরে বোর্ডটি মুদ্রণ করে, অন্য পদক্ষেপ গ্রহণ করে।

প্রারম্ভিক বোর্ডটি দেখতে এমন দেখাচ্ছে:

......
...... 
......
......
......
...... 

এবং প্রথম প্লেয়ার (অর্ডার) ইনপুটগুলির পরে 1 2 X, এটি দেখতে দেখতে এমন হওয়া উচিত:

......
...... 
.X....
......
......
......  

তেমনিভাবে, পরের প্লেয়ার (বিশৃঙ্খলা) ইনপুটগুলি 3 3 Oএটিকে দেখায়:

......
...... 
.X....
...O..
......
......  

এবং এটি অব্যাহত থাকে যতক্ষণ না একজন খেলোয়াড় জেতে।

সর্বদা হিসাবে, স্ট্যান্ডার্ড লুফোলগুলি যা মজাদার সমস্ত কিছু থেকে সরিয়ে নেয় তা নিষিদ্ধ।

বিজয়ী হ'ল সংক্ষিপ্ত কোড সহ 15 জুন, 00:00 ইউটিসি (এই চ্যালেঞ্জটি পোস্ট হওয়ার প্রায় এক মাস আগে)


যদি কোনও প্লেয়ার ইতিমধ্যে নেওয়া অবস্থানে টাইপ করে তবে কী হবে?
লুভজো

@ লভজো এটি ফিরে আসে INVALID। আমি এখনই এটি সম্পাদনা করেছি, ধন্যবাদ।
ASCIIThenANSI

1
একবারে 5 টি টাইলস গেমটি প্রস্থান করা উচিত কি?
কাইল কানোজ

1
হতে পারে আমি এটি উপেক্ষা করেছি কিন্তু এটি কী পর্দায় বোর্ডটি প্রিন্ট করতে হবে বা কেবল বোর্ডের অবস্থা এবং কোন প্লেয়ার জিতেছে আউটপুটটি পরীক্ষা করতে হবে?
কোডোস জনসন

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

উত্তর:


1

পিএইচপি, 316

এখানে আমার জমা দেওয়া। এটি কমান্ড লাইনে পিএইচপি দ্বারা সম্পাদন করতে হবে।

মনে রাখবেন যে আমি তৈরি কিছু শর্টকাটের কারণে এই কোডটি নোটিশ তৈরি করে। ঠিক আছে কিনা আমাকে জানাবেন। আমি আরও কয়েকটি অক্ষর যুক্ত করে এটি ঠিক করতে পারি। আমি এই পৃষ্ঠাটি যাচাই করেছি এবং উপরের উত্তরটি বলেছে যে এটির কোনও উল্লেখ না থাকলে ত্রুটি প্রতিবেদন বন্ধ রয়েছে ass

<?for(;$i++<6;)$b.='......|';while(($a=trim(fgets(STDIN)))!='q'){preg_match('/^([0-5]) ([0-5]) ([XO])$/',$a,$d)&($b[$c=$d[2]*7+$d[1]]=='.')?$b[$c]=$d[3]:print"INVALID\n";echo str_replace("|","\n",$b); foreach([0,5,6,7]as$e)preg_match('/(X|O)(.{'.$e.'}\1){4}/',$b)-1?:die("P1 Wins");strstr($b,'.')?'':die("P2 Wins");}

এবং এখানে কোডটির আন-গল্ফ সংস্করণ রয়েছে:

<?php
error_reporting(E_ALL & ~E_NOTICE);

for(;$i++<6;)$b.='......|';
while(($a=trim(fgets(STDIN)))!='q'){

    #Validate and assign 
    preg_match('/^([0-5]) ([0-5]) ([XO])$/',$a,$d)&($b[$c=$d[2]*7+$d[1]]=='.')?$b[$c]=$d[3]:print"INVALID\n";

    #Output
    echo str_replace("|","\n",$b); 

    #Check if Order wins
    foreach([0,5,6,7]as$e) {
        preg_match('/(X|O)(.{'.$e.'}\1){4}/',$b)-1?:die("P1 Wins");
    }

    #Check if Chaos wins
    strstr($b,'.')?'':die("P2 Wins");
}

হ্যাঁ, নোটিশগুলি ঠিক আছে।
ASCIIThenANSI

4

জাভাস্ক্রিপ্ট, 360

পরিবর্তিত ইন্টারেক্টিভ গেম সম্পাদনা করুন , এমনকি এমএসআইইতে চালানো উচিত

অনুরোধ অনুসারে, পাঠ্য ভিত্তিক গেম, পপআপের মাধ্যমে ইনপুট, কনসোলে আউটপুট (যাতে মনসোপেসেড ফন্ট থাকে)।

গেমটি 'কিউ' দিয়ে বা প্রম্পটে 'বাতিল' ক্লিক করে প্রস্থান করুন।

ES5 বৈশিষ্ট্যগুলি ব্যবহার না করে, এটি যে কোনও আধুনিক ব্রাউজারে চলতে হবে (যেখানে আপনার কাছে জেএস কনসোল প্যানেল থাকতে পারে)

b='\n......'.repeat(6).split('');
for(h=t=0;!h&t<36;)
{
  i=prompt();
  if(i=='q')i=null;
  i=i.match(/([0-5]) ([0-5]) ([XO])/);
  m='INVALID';
  if(b[p=i?i[2]*7-~i[1]:0]=='.')
  {
    ++t;
    b[p]=i[3];
    m=b.join('');
    for(x=z='',c=0;c++<6;)
      for(x+='_',z+='_',r=0;r<6;r++)
        x+=b[c+r*7],z+=b[c<4?c-1+r*8:c+1+r*6];
    h=(/X{5}|O{5}/.test(b.join('')+x+z))
  }
  console.log(m);
}
console.log("P"+(2-h)+" WINS")

এখন, আরও কিছু মজাদার ইন্টারেক্টিভ এবং গ্রাফিক সংস্করণ, খেলতে স্নিপেট চালান।


দুর্দান্ত ক্লিকযোগ্য সংস্করণ! (গৌণ পরামর্শ: আপনি রেডিও বোতামগুলির পরিবর্তে ডান / বাম ক্লিক ব্যবহার করতে পারেন))
xebtl

@ এক্সবেটল আমি চেষ্টা করে দেখব
edc65

1

জাভা, 565 অক্ষর ডি:

public class M{public static void main(String[]r){int[]p=new int[36];int u=0;for(;;){String l=new java.util.Scanner(System.in).nextLine();if(l == "q")break;int a=l.charAt(0)-'0'+(l.charAt(2)-'0')*6,i=p[a]==0?1:0;if(i>0)p[a]=l.charAt(4);u+=i;r(i==0?"INVALID\n":"");if(u==36){r("P2 WINS");break;}for(int x=0;x<6;x++)for(int y=0;y<6;y++)for(int d=0;d<3;d++)try{int e=1,c=p[x+y*6],z=x,h=y;if(c=='X'||c=='Y'){for(;e<6;e++){if(d%2==0)z++;if(d>0)h++;if(p[z+h*6]!=c)break;}if(e==5){r("P1 WINS");return;}}}catch(Exception e){}}}static void r(Object o){System.out.print(o);}}

এটি সম্ভবত সবচেয়ে দীর্ঘতম কোড-গল্ফ। আমি আসলে এই ভাল না।


1

অক্টাভা, 453

format plus 'XO.'
disp(F=zeros(6))
r=@()fread(0,1);R=@()r()-47;q=@(m)printf(m)&&quit;e=@()q("INVALID");l=@(n)n<1||n>6&&e();s=@()r()==32||e();w="P1 WINS";f=@(v)abs(sum(v))==22.5&&q(w);g=@(m)any(abs(sum(m))==22.5)&&q(w);d=@diag;while 1
i=R();i==66&&quit;l(i);s();l(j=R());s();F(j,i)&&e();abs(v=R()-36.5)==4.5||e();F(j,i)=v;disp(F)
r();f(d(F,-1));f(d(F,0)(2:6));f(d(F,0)(1:5));f(d(F,1));g(F(1:5,:));g(F(2:6,:));g(F(:,1:5)');g(F(:,2:6)');F&&q("P2 WINS");end

বাস্তবায়নটি বেশ সোজা, format plusমুদ্রণের যত্ন নেওয়ার জন্য একমাত্র আসল "কৌশল" । এখানে একটি মন্তব্য করা সংস্করণ:

format plus 'XO.'               # this is where the magic happens

## initialize and print empty board
disp(F=zeros(6))

## shortcuts
r=@()fread(0,1);
R=@()r()-47;
q=@(m)printf(m)&&quit;
e=@()q("INVALID");
l=@(n)n<1||n>6&&e();
s=@()r()==32||e();
w="P1 WINS";
f=@(v)abs(sum(v))==22.5&&q(w);
g=@(m)any(abs(sum(m))==22.5)&&q(w);
d=@diag;

while 1
  i=R();                        # read index 1
  i==66&&quit;                  # ‘q’?
  l(i);                         # check bounds
  s();                          # read and check space
  l(j=R());                     # read and check index 2
  s();                          # read and check space
  F(j,i)&&e();                  # square already filled?
  abs(v=R()-36.5)==4.5||e();    # valid mark?
  F(j,i)=v;                     # assigndisp(F)                       # and print board
  r();                          # read off newline

  ## check diagonals
  f(d(F,-1));
  f(d(F,0)(2:6));
  f(d(F,0)(1:5));
  f(d(F,1));

  ## check rows
  g(F(1:5,:));
  g(F(2:6,:));

  ## check columns
  g(F(:,1:5)');
  g(F(:,2:6)');

  ## check chaos
  F&&q("P2 WINS");
end

ইনপুট বাক্য গঠন এবং বৈধতা পরীক্ষা করার প্রয়োজনীয়তার কারণে কোডটি fread()একবারে একটি অক্ষর পড়তে ব্যবহার করে।

আমি পরিপাটি করে বোর্ড এবং বার্তাগুলি আউটপুট দেওয়ার যত্ন নিয়েছিলাম। যদি কিছু অতিরিক্ত আউটপুট গ্রহণযোগ্য হয় তবে আমি কয়েক বাইট শেভ করতে পারি। উদাহরণস্বরূপ, স্বয়ংক্রিয় মুদ্রণ (না disp(F)) ব্যবহার করে বোর্ডটি প্রদর্শিত হবে

F =

......
......
......
......
......
......

এছাড়াও, আমি ব্যাখ্যা করেছি যে প্রতিটি পদক্ষেপ একটি পৃথক লাইনে দেওয়া আছে।


নমুনা ইন্টারঅ্যাকশন ( -qস্যুইচটি কেবল অক্টোভের শিরোনামকে দমন করতে পারে):

$ octave -q order_chaos.m 
......
......
......
......
......
......
3 3 X
......
......
......
...X..
......
......
2 3 O
......
......
......
..OX..
......
......
3 3 O
INVALID

অবৈধ পদক্ষেপের কারণে প্রোগ্রামটি প্রস্থান করতে পারে (নিশ্চিত না যে এটির উদ্দেশ্য ছিল কিনা)।


কেবল নিশ্চিত করার জন্য (যেহেতু আগে কিছুটা বিভ্রান্তি ছিল), এটি উভয় খেলোয়াড়ের কাছ থেকে ইনপুট নেয় এবং কোনও প্রদত্ত বোর্ড জিতেছে কিনা তা খতিয়ে দেখার পরিবর্তে গেমটি বাস্তবে সিমুলেট করে?
ASCIIThenANSI

পছন্দ করেছেন এটি ফর্মের প্রতিটি পদক্ষেপ x y tএকটি পৃথক লাইনে প্রত্যাশা করে (এবং অন্য কোনও ইনপুট নেই)।
xebtl

এবং এটি প্রতিটি ইনপুট পরে বোর্ড মুদ্রণ?
ASCIIThenANSI

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