এই টিক-ট্যাক-টু বোর্ডটি মুদ্রণ করুন!


9

এখানে একটি টিক-ট্যাক-টো বোর্ড রয়েছে:

   a     b     c
      |     |     
1  -  |  -  |  -  
 _____|_____|_____
      |     |     
2  -  |  -  |  -  
 _____|_____|_____
      |     |     
3  -  |  -  |  -  
      |     |     

চালগুলির একটি সেট দেওয়া, টোকেনগুলি দিয়ে বোর্ডটি মুদ্রণ করুন।

ইনপুট স্থানগুলির দ্বারা পৃথক করা পদক্ষেপ হিসাবে নেওয়া হবে এবং প্রতিটি পদক্ষেপ থাকবে:

  • প্রথমত, টোকেন যা যাচ্ছে
  • এরপরে, কলামটির চিঠিটি এটি চলছে
  • সর্বশেষে, যে সারিটি এটি চলছে তার সংখ্যা

নোট করুন যে সাধারণ টিক-টাক-টো নিয়ম কোনও বিষয় নয়।

এছাড়াও, চিঠি এবং সংখ্যা মুদ্রণের প্রয়োজন নেই।

উদাহরণস্বরূপ, ইনপুটটির Ob2 Xc2 Ob3 Xa1ফলাফল হবে

     |     |     
  X  |  -  |  -  
_____|_____|_____
     |     |     
  -  |  O  |  X  
_____|_____|_____
     |     |     
  -  |  O  |  -  
     |     |     

মনে রাখবেন, এই সুতরাং, বাইট জিতের ক্ষুদ্রতম সংখ্যার কোডটি।

লিডারবোর্ড

নিয়মিত লিডারবোর্ড এবং ভাষার দ্বারা বিজয়ীদের একটি সংক্ষিপ্ত বিবরণ উভয়ই তৈরি করতে এখানে একটি স্ট্যাক স্নিপেট।

আপনার উত্তরটি প্রদর্শিত হয়েছে তা নিশ্চিত করার জন্য, দয়া করে নীচের মার্কডাউন টেমপ্লেটটি ব্যবহার করে আপনার উত্তরটি শিরোনাম দিয়ে শুরু করুন:

# Language Name, N bytes

Nআপনার জমা দেওয়ার আকারটি কোথায় ? আপনি যদি নিজের স্কোরটি উন্নত করেন তবে আপনি পুরানো স্কোরগুলি শিরোনামে রেখে দিতে পারেন । এই ক্ষেত্রে:

# Ruby, <s>104</s> <s>101</s> 96 bytes

যদি আপনি নিজের শিরোনামে একাধিক সংখ্যা অন্তর্ভুক্ত করতে চান (যেমন আপনার স্কোর দুটি ফাইলের সমষ্টি বা আপনি আলাদাভাবে দোভাষী পতাকা পেনাল্টির তালিকা করতে চান), নিশ্চিত হয়ে নিন যে আসল স্কোরটি শিরোনামের শেষ সংখ্যা:

# Perl, 43 + 2 (-p flag) = 45 bytes

আপনি ভাষাটির নামটিকে একটি লিঙ্কও বানাতে পারেন যা লিডারবোর্ড স্নিপেটে প্রদর্শিত হবে:

# [><>](http://esolangs.org/wiki/Fish), 121 bytes


লেখার চ্যালেঞ্জগুলি এড়ানো একটি বিষয় হ'ল জটিল I / O ফর্ম্যাট । আপনার ইনপুট ফর্ম্যাটটি যথেষ্ট নমনীয় করুন। পরের বার স্যান্ডবক্স চেষ্টা করুন ।
এরিক দ্য আউটগল্ফার

1
@ এরিক্থে গল্ফার ভারী? এই ইনপুট ফর্ম্যাটটি সরল এবং সুস্পষ্ট
edc65

@ edc65 আমার অর্থ এই যে, আমি যে কোনও ফর্ম্যাটে কেবল ইনপুট পেতে চাই, এটি কেবলমাত্র নয়, তবে আমার ধারণা এটি এখনই দেরিতে। আমি মনে করি আপনি বোঝাতে চাইছেন এটি দৃশ্যত পরিষ্কার, তবে আমি এটি হ্যান্ডেল করতে পারি না। কেন স্থানগুলি এবং অন্য কোনও বিভাজক নয় উদাহরণস্বরূপ?
এরিক দ্য আউটগল্ফার

1
@ এরিক্থে গল্ফার আমাকে ভুল মনে করবেন না, তবে যদি আপনার অতিরিক্ত অতিরিক্ত রহস্যজনক ভাষা ফাঁকা স্থানগুলি পরিচালনা করতে না পারে তবে খুব খারাপ ... আপনি কেবলমাত্র এবার অন্য কিছু ব্যবহার করতে হবে।
edc65

1
@ edc65 উদাহরণস্বরূপ, Sesos এ এমনকি ইনপুট ডেটা লোড করা বেশ কঠিন হবে। আমি (এক পদক্ষেপ জন্য তিনটি আছে ints) পূর্ণসংখ্যার তালিকা পছন্দ করেন, মত 1 2 3জন্য Xb3(ঠিক যে হতে হবে তা নয়)।
এরিক দ্য আউটগল্ফার

উত্তর:


7

জাভাস্ক্রিপ্ট (ES6), 136 133 129 বাইট

let f =

i=>eval("for(y=9,s='';y--;s+=`\n`)for(x=18;--x;)s+=x%6-3|y%3-1?' __|'[x%6?y/3:3]||' ':i[i.search('cba'[x/6|0]+(10-y)/3)-1]||'-'")

console.log(f("Ob2 Xc2 Ob3 Xa1"))


5

পাইথন (২.7), 188 180 বাইট

def f(s):a,b=3*[' '*5],3*['_'*5];c,d,e=[['  '+dict((m[1:],m[0])for m in s.split(' ')).get(x+y,'-')+'  'for x in'abc']for y in'123'];print'\n'.join(map('|'.join,[a,c,b,a,d,b,a,e,a]))

তৃতীয় লাইনটি আপনি আগে স্পেস অপসারণ করতে পারেন 'গুলি
ড্যানিয়েল

পাইথন গল্ফিং স্বাগতম! কটাক্ষপাত পাইথন গলফ টিপস;ইনডেন্টেশন বাঁচাতে আপনার সমস্ত কোড এক লাইনে রাখার অনুমতি দিয়ে আপনি বিবৃতি পৃথক করতে পারেন ।
xnor

for y in '123'-> for y in'123'। এছাড়াও, এক্সনোর যা বলেছিল: ;পৃথক বিবৃতি ব্যবহার করে আপনি নিজের ফাংশনটিকে ওয়ান-লাইনার করতে পারেন । এই সমস্ত গল্ফিং টিপস ব্যবহার করে আপনি 6 বাইট গল্ফ করতে পারেন।
এরিক আউটগল্ফার

4

পাইথন 2, 112 বাইট

s=input()+'- '
r=3;exec"print'|'.join([' '*5,'  %s  '%s[s.find(c+`r/3`)-1],'_'*5][r%11%3]for c in'abc');r+=1;"*9

সারি সূচকগুলি অনুসারে নয়টি সারি মুদ্রিত হয় r। সারি সূচক থেকে গণনা করা হয় 3থেকে 11একটি ইন execলুপ। প্রতিটি সারিতে |তিনটি 5-অক্ষরের অংশগুলিতে যোগ হওয়া উল্লম্ব রেখা থাকে:

  • পাঁচটি স্পেস
  • দুটি স্পেস, একজন খেলোয়াড়ের প্রতীক, তারপরে দুটি স্পেস
  • পাঁচটি আন্ডারস্কোর

ধরনের সঙ্গে চক্র তৈরি করা হয় r%3ছাড়া শেষ সারি আন্ডারস্কোর স্পেস বদলে, সঙ্গে অর্জন করেছে r%11%3

বর্তমান ঘরের জন্য খেলোয়াড় প্রতীক খুঁজতে, আমরা সারি সংখ্যা তাকান r/3এবং কলাম অক্ষর cথেকে "abc"। আমরা তাদেরকে দ্বি-চরিত্রের স্ট্রিং তৈরি করতে b3, যেমন ইনপুট স্ট্রিংয়ের সূচকটি খুঁজে পেতে এবং তারপরে একটি সূচক আগে ( Xবা O) একটি সূচি গ্রহণ করতে সম্মত করি। কোনও খেলোয়াড় যদি সেখানে না খেলে, findডিফল্ট হবে -1, যা হ্রাস পাবে -2। আমরা হ্যাক s[-2]হতে -দুটি অক্ষর সংযোজন যখন আমরা ইনপুট নিতে দ্বারা।


1

পিএইচপি, 187 বাইট

<?for(;$i++<162;)$s.=$i%18?($i%6?($i<144&&$i%54>36?"_":($i<144&&$i%54>18&&$i%6==3?"-":" ")):"|"):"\n";foreach(explode(" ",$_GET[a])as$t)$s[20+6*(1+($t[1]<=>b))+54*($t[2]-1)]=$t[0];echo$s;

স্ট্রিং হিসাবে ইনপুট নেয়। যদি আমি কোনও অ্যারে ব্যবহার করতে পারি তবে এটির $_GET[a]পরিবর্তে হ্রাস করা যেতে পারেexplode(" ",$_GET[a])

207 বাইট

<?foreach(explode(" ",$_GET[a])as$t)$a[(1+($t[1]<=>b))+3*($t[2]-1)]=$t[0];for(;$i++<162;)$s.=$i%18?($i%6?($i<144&&$i%54>36?"_":" "):"|"):"\n";for(;$x<9;)$s[18+54*(($x/3)^0)+2+6*($x%3)]=$a[+$x++]??"-";echo$s;

এই 194 বাইট তৈরির সহজ ধারণা

<?for(;++$i<10;)$s.=($i==9||$i%3?($i%3==2?"  -  |  -  |  -  ":"     |     |     "):"_____|_____|_____")."\n";foreach(explode(" ",$_GET[a])as$t)$s[20+6*(1+($t[1]<=>b))+54*($t[2]-1)]=$t[0];echo$s;

1

গণিত, 205 বাইট

StringReplacePart[a="     |     |     
";b="  -  |  -  |  -  
";c="_____|_____|_____
";{a,b,c,a,b,c,a,b,a}<>"",##]&@@Transpose[{#,{#,#}&[54LetterNumber@#2+6FromDigits@#3-39]}&@@@Characters/@StringSplit@#]&

আমি যদি অন্তর্নির্মিত ব্যবহার করতে পারি তবে এটি আরও ছোট হবে ... (92 বাইট)

Grid@SparseArray[{LetterNumber@#2,FromDigits@#3}->#&@@@Characters/@StringSplit@#,{3,3},"-"]&

1

জাভা, 138 বাইট

সম্পাদনা:

  • -২ বাইট বন্ধ। কেভিন ক্রুইজসেনকে ধন্যবাদ

Snipet:

m->{char[][]o=new char[3][3];for(char[]a:m)o[a[1]-'a'][a[2]-'0']=a[0];for(char[]a:o)System.out.println(a[0]+'|'+a[1]+'|'+a[2]+"\n-----");}

কোড:

public static void tictactoe(char[][]moves){
  char[][]o=new char[3][3];
  for(char[]a:moves){
    o[a[1]-79][a[2]-48]=a[0];
  }
  for(char[]a:o){
    System.out.println(a[0]+'|'+a[1]+'|'+a[2]+"\n-----");
  }
}

o[a[1]-'a'][a[2]-'0']=a[0]দুটি বাইট দ্বারা গল্ফ করা যায়o[a[1]-97][a[2]-48]=a[0]
কেভিন ক্রুইজসেন

কিন্তু যদি ভুল আউটপুট হয়, তাই না?
norganos

আপনি কোন ভুল বলতে চাইছেন?
রোমান গ্রাফ

আউটপুট ফর্ম্যাট ওপি দ্বারা জিজ্ঞাসা করা মত একই হয় না।
শৈশুমারা

1

ব্যাচ, 341 339 305 287 বাইট

@for %%a in (a1 a2 a3 b1 b2 b3 c1 c2 c3)do @set %%a=-
@for %%a in (%*)do @set s=%%a&call call set %%s:~1%%=%%s:~0,1%%
@set s="     |     |     "
@for %%l in (%s% "  %a1%  |  %b1%  |  %c1%" %s: =_% %s% "  %a2%  |  %b2%  |  %c2%" %s: =_% %s% "  %a3%  |  %b3%  |  %c3%" %s%)do @echo %%~l

ধারাবাহিক আউটপুট ধরে। সম্পাদনা করুন: অপ্রয়োজনীয় স্পেসগুলি সরিয়ে 2 বাইট সংরক্ষণ করা হয়েছে। একটি forলুপ ব্যবহার করে আউটপুট লিখে 34 বাইট সংরক্ষণ করা । সাবট্রিনটি বাদ দিয়ে 18 বাইট সংরক্ষণ করা হয়েছে।


0

অটোভিম , ১১০ বাইট (প্রতিযোগিতা নয়)

অটোভিম চালানোর পরীক্ষা করুন ... এটি একটি ভার্সক্রিপ্টের উত্তর pretty প্রতিযোগিতা করছে না কারণ অটোভিম এখনও বিকশিত হচ্ছে।

ñ5i ␛a|␛ÿp3hr-phv0r_⌥v$kkyPPy2jPP$⌥vG$xGđkÿjp
…nsplit(@m)
ñğ0(@n[2]*3-2)j((char2nr(@n[1])-96)*6-4)lr(@n[0])
e…

এটি চালানোর জন্য:

./bin/autovim run tictactoe.autovim -ni -@m "Ob2 Xc2 Ob3 Xa1"

Ungolfed:

execute "normal 5i \<esc>a|\<esc>yyp3hr-phv0r_\<c-v>$kkyPPy2jPP$\<c-v>G$xGddkyyjp"
for @n in split(@m)
execute "normal gg0".(@n[2]*3-2)."j".((char2nr(@n[1])-96)*6-4)."lr".(@n[0]).""
endfor

আগ্রহ থাকলে তা অনুসরণ করার ব্যাখ্যা :)


0

গ্রোভী, 174 বাইট

{s->def r=0,o,t=[:];s.split(' ').each{t[it[1..2]]=it[0]};9.times{y->o='';17.times{x->o+=x%6==5?'|':y in [2,5]?'_':x%6==2&&y%3==1?t['abc'[r++%3]+(y+2)/3]?:'-':' '};println o}}

ungolfed:

{s->
    def r=0, o, t=[:];
    s.split(' ').each{
        t[it[1..2]]=it[0]
    };
    9.times{y->
        o='';
        17.times{x->
            o+= x%6==5 ? '|' : y in [2,5]? '_' : x%6==2 && y%3==1 ? t['abc'[r++%3]+(y+2)/3]?:'-' : ' '
        };
        println o
    }
}

0

সিজেম, 62 বাইট

" -_ -_ - "_'-Ser_+_@\]3*sqS/{)~\)'a-F*@+3*G+\t}/9/5/'|9*a*zN*

এটি অনলাইনে চেষ্টা করুন

ব্যাখ্যা:

" -_ -_ - "_'-Ser_+_@\]3*s e# Build a 135 character string representing the 
                           e# columns of the board (top to bottom, left to right)
qS/{)~\)'a-F*@+3*G+\t}/    e# Process the input, put the tokens (O,X) in the string
                           e# The tokens have to placed at indexes 
                           e# [19 22 25 64 67 70 109 112 115]
                           e# This is done with the formula 3*(15x+y)+16,
                           e# where x is the code point of the column letter 
                           e# (minus 'a') and y is the row number.
9/5/'|9*a*zN*              e# Split into its parts, add the column separators, zip 
                           e# and join with newlines.
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.