이 틱택 토 보드를 인쇄하십시오!


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


쓰기 과제로 피해야 할 것은 Cumbersome I / O 형식 입니다. 입력 형식을 충분히 유연하게 만드십시오. 다음에 샌드 박스를 사용해보십시오 .
Outgolfer Erik

1
트윗 담아 가기 이 입력 형식은 명백하고 명백합니다
edc65

@ edc65 나는이 형식뿐만 아니라 모든 형식의 입력을 원하지만 지금은 늦었다 고 생각했습니다. 시각적으로 명확하다는 것을 의미한다고 생각하지만 전혀 처리 할 수 ​​없습니다. 왜 다른 구분 기호가 아닌 공백이 있습니까?
Outgolfer Erik

1
@EriktheGolfer는 나를 잘못 생각하지 않지만 슈퍼 여분의 난해한 언어가 빈 공간을 처리 할 수 ​​없다면 너무 나쁜 ... 이번에는 다른 것을 사용해야합니다.
edc65

1
@ edc65 예를 들어 Sesos에서는 입력 데이터를로드하기조차 매우 어렵습니다. 내가 좋아하는, 정수의 목록 (한 이동 세의 int)를 선호 1 2 3에 대한 Xb3(정확히을 할 필요가 없습니다).
Outgolfer Erik

답변:


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

파이썬 (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

파이썬 골프에 오신 것을 환영합니다! 파이썬 골프 팁을 살펴보십시오 . ;들여 쓰기를 줄이기 위해 모든 코드를 한 줄에 넣을 수 있도록 명령문을 분리 할 수 ​​있습니다 .
xnor

for y in '123'-> for y in'123'. 또한 xnor의 말 : 함수를 하나의 라이너로 만들어 ;문장을 분리 할 수 있습니다 . 이 모든 골프 팁을 사용하여 6 바이트를 골프로 칠 수 있습니다.
Outgolfer Erik

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

행 인덱스에 해당하는 9 개의 행이 인쇄 r됩니다. 행 인덱스로부터 카운트 311exec루프. 각 행은 |3 개의 5 문자 세그먼트를 연결 하는 수직선으로 구성되어 있습니다 .

  • 5 칸
  • 두 칸, 플레이어 기호, 두 칸
  • 밑줄 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에게 감사합니다

스 니펫 :

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]두 바이트로 golfed 할 수있다o[a[1]-97][a[2]-48]=a[0]
케빈 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 바이트를 절약했습니다. for루프를 사용하여 출력을 작성하여 34 바이트를 절약했습니다 . 서브 루틴을 제거하여 18 바이트를 절약했습니다.


0

Autovim , 110 바이트 (경쟁 불가 )

Autovim을 운전하는 시험 ... 이것은 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"

언 골프 드 :

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}}

언 골프 :

{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.