इस टिक-टैक-टो बोर्ड को प्रिंट करें!


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
@ErictheGolfer बोझिल? यह इनपुट प्रारूप सादा और स्पष्ट है
edc65

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

1
@EriktheGolfer मुझे गलत नहीं लगता है, लेकिन अगर आपकी सुपर अतिरिक्त गूढ़ भाषा रिक्त स्थान को संभाल नहीं सकती है, तो बहुत बुरा ... आपको इस बार कुछ और उपयोग करना होगा।
edc65

1
@ edc65 उदाहरण के लिए, सेसोस में इनपुट डेटा को लोड करना भी काफी मुश्किल होगा। मैं एक (एक कदम के लिए तीन ints) पूर्णांकों की सूची पसंद करेंगे, जैसे 1 2 3के लिए Xb3(वास्तव में होना जरूरी नहीं है)।
आउटगोल्फर

जवाबों:


7

जावास्क्रिप्ट (ईएस 6), 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

पायथन (2.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]))

तीसरी पंक्ति में आप 's से पहले रिक्त स्थान निकाल सकते हैं
डैनियल

अजगर गोल्फ में आपका स्वागत है! पायथन गोल्फ सुझावों पर एक नज़र डालें । आप ;इंडेंटेशन को बचाने के लिए अपने सभी कोड एक लाइन पर रखने की अनुमति देकर स्टेटमेंट को अलग कर सकते हैं ।
xnor

for y in '123'-> for y in'123'। इसके अलावा, xnor ने क्या कहा: आप ;अलग-अलग बयानों का उपयोग करके अपने फ़ंक्शन को एक-लाइनर बना सकते हैं । इन सभी गोल्फ सुझावों का उपयोग करके, आप 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

PHP, 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 बाइट्स

संपादित करें:

  • -2 बाइट्स बंद। @Kevin Kruijssen को धन्यवाद

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]
केविन क्रूज़सेन

लेकिन अगर गलत आउटपुट है, है ना?
नॉटगनोस ऑक्ट

आप किस गलती का मतलब है?
रोमन ग्रफ

आउटपुट स्वरूप ओपी द्वारा पूछे गए के समान नहीं है।
शीशमारा

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

ऑटोविम , 110 बाइट्स (प्रतिस्पर्धा नहीं)

टेस्ट ड्राइविंग ऑटोविम ... यह एक बहुत ही विम्सस्क्रिप्ट उत्तर है। प्रतिस्पर्धा नहीं है क्योंकि ऑटोविम अभी भी विकसित हो रहा है।

ñ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.
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.