พิมพ์บอร์ดโอเอกซ์!


9

นี่คือบอร์ดโอเอกซ์:

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

ให้ชุดของการเคลื่อนไหวพิมพ์กระดานที่มีโทเค็นบน

ข้อมูลจะถูกนำเข้ามาในลักษณะของการเคลื่อนไหวคั่นด้วยช่องว่างโดยแต่ละการเคลื่อนไหวจะเป็น:

  • ก่อนอื่นโทเค็นที่กำลังเกิดขึ้น
  • ถัดไปตัวอักษรของคอลัมน์ที่มีการเคลื่อนไหว
  • สุดท้ายจำนวนแถวที่มันกำลังเคลื่อนที่

โปรดทราบว่ากฎ tic-tac-toe ปกติไม่สำคัญ

นอกจากนี้ไม่จำเป็นต้องพิมพ์ตัวอักษรและตัวเลข

ตัวอย่างเช่นอินพุตOb2 Xc2 Ob3 Xa1จะส่งผลให้

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

จำไว้ว่านี่คือ ดังนั้นรหัสที่มีจำนวนไบต์น้อยที่สุดจะเป็นผู้ชนะ

ลีดเดอร์

นี่คือ Stack Snippet เพื่อสร้างทั้งกระดานผู้นำปกติและภาพรวมของผู้ชนะตามภาษา

เพื่อให้แน่ใจว่าคำตอบของคุณปรากฏขึ้นโปรดเริ่มคำตอบด้วยหัวข้อโดยใช้เทมเพลต Markdown ต่อไปนี้:

# 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 ที่ยุ่งยาก โปรดทำให้รูปแบบการป้อนข้อมูลของคุณมีความยืดหยุ่นเพียงพอ ครั้งต่อไปลองSandbox
Erik the Outgolfer

1
@EriktheGolfer ยุ่งยากไหม รูปแบบการป้อนข้อมูลนี้เป็นแบบธรรมดาและชัดเจน
edc65

@ edc65 ฉันหมายถึงฉันต้องการรับอินพุตในรูปแบบใด ๆ ไม่ใช่แค่อันนี้ แต่ฉันเดาว่ามันจะมาช้าแล้ว ฉันคิดว่าคุณหมายถึงมันเห็นได้ชัด แต่ฉันไม่สามารถจัดการได้เลย ทำไมช่องว่างและไม่ใช่ตัวคั่นอื่นตัวอย่างเช่น
Erik the Outgolfer

1
@EriktheGolfer อย่าเข้าใจฉันผิด แต่ถ้าภาษาลึกลับพิเศษของคุณไม่สามารถจัดการช่องว่างได้แย่มาก ... คุณต้องใช้อย่างอื่นในเวลานี้
edc65

1
@ edc65 ตัวอย่างเช่นใน Sesos มันจะค่อนข้างยากที่จะโหลดข้อมูลเข้า ฉันต้องการรายการจำนวนเต็ม (สามค่าสำหรับการย้ายหนึ่งครั้ง), เช่น1 2 3สำหรับXb3(ไม่จำเป็นต้องเป็นอย่างนั้น)
Erik the Outgolfer

คำตอบ:



5

Python (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
Daniel

ยินดีต้อนรับสู่ python golfing! ลองดูที่เป็นเคล็ดลับกอล์ฟหลาม คุณสามารถแยกข้อความสั่งโดย;อนุญาตให้คุณใส่รหัสทั้งหมดในบรรทัดเดียวเพื่อบันทึกการเยื้อง
xnor

for y in '123'for y in'123'-> นอกจากนี้สิ่งที่ xnor กล่าวไว้: คุณสามารถทำให้ฟังก์ชั่นของคุณเป็นหนึ่งซับได้โดยใช้;เพื่อแยกข้อความ ด้วยเคล็ดลับการเล่นกอล์ฟเหล่านี้คุณสามารถเล่นกอล์ฟ 6 ไบต์
Erik the Outgolfer

4

Python 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%3r%11%3

เพื่อหาสิ่งที่เป็นสัญลักษณ์ของผู้เล่นสำหรับมือถือในปัจจุบันเรามองไปที่หมายเลขแถว r/3และตัวอักษรคอลัมน์จากc "abc"เราเชื่อมพวกมันเข้าด้วยกันเพื่อสร้างสตริงที่มีอักขระสองตัวเช่นb3ค้นหาดัชนีของมันในสตริงอินพุตจากนั้นนำสัญลักษณ์ ( XหรือO) ดัชนีหนึ่งรายการก่อนหน้า หากผู้เล่นไม่เล่นที่นั่นที่findจะเริ่มต้นที่จะ-1 decrements -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

Mathematica, 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

Java, 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]
Kevin Cruijssen

แต่ถ้ามันออกมาผิดมันไม่ใช่เหรอ?
norganos

คุณหมายถึงความผิดพลาดใด
Roman Gräf

รูปแบบผลลัพธ์ไม่เหมือนกับที่ถามโดย OP
seshoumara

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 ไบต์โดยลบช่องว่างที่ไม่จำเป็นออก บันทึก 34 ไบต์โดยการเขียนเอาต์พุตโดยใช้forลูป บันทึก 18 ไบต์ด้วยการกำจัดรูทีนย่อย


0

Autovim 110 ไบต์ (ไม่ใช่การแข่งขัน)

ทดสอบการขับขี่อัตโนมัติ ... นี่เป็นคำตอบของ Vimscript ไม่แข่งขันเพราะ Autovim ยังอยู่ระหว่างการพัฒนา

ñ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

Groovy, 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

CJam, 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.