빈 글자 맞추기 보드 그리기


28

표준 글자 맞추기 보드는 문자 타일을 놓을 수있는 15 × 15 격자 공간입니다. 대부분의 공백은 비어 있지만 일부는 더블 워드 점수 (분홍색), 트리플 워드 점수 (빨간색), 더블 문자 점수 (연한 파란색) 및 트리플 문자 점수 (파란색)입니다. 보통 중심에는 별이 있습니다 (더블 워드 점수로 계산).

Scrabble board

표준 빈 스크래블 보드를 ASCII 형식으로 출력하는 프로그램 또는 함수를 작성하십시오.

  • . 빈 공간을 나타냅니다

  • D 이중 단어 점수를 나타냅니다

  • T 트리플 단어 점수를 나타냅니다

  • d 이중 문자 점수를 나타냅니다

  • t 트리플 문자 점수를 나타냅니다

  • X 중심 별을 나타냅니다

즉, 정확한 결과는

T..d...T...d..T
.D...t...t...D.
..D...d.d...D..
d..D...d...D..d
....D.....D....
.t...t...t...t.
..d...d.d...d..
T..d...X...d..T
..d...d.d...d..
.t...t...t...t.
....D.....D....
d..D...d...D..d
..D...d.d...D..
.D...t...t...D.
T..d...T...d..T

선택적으로 뒤에 새줄 문자가옵니다.

바이트 단위의 가장 짧은 코드가 이깁니다.


왜 별을 대표 X하지 *않습니까? : o
Fatalize

6
*너무 높고 강력합니다.
Calvin 's Hobbies

왜 안돼 ? : D
mbomb007

5
@ mbomb007 ASCII 아트 챌린지에서 비 ASCII 문자? 이단 !
Luis Mendo

답변:


16

MATL , 59 54 52 바이트

4t:g2I5vXdK8(3K23h32h(H14(t!XR+8: 7:Pht3$)'DtdTX.'w)

온라인으로 사용해보십시오!

설명

코드는 세 가지 주요 단계를 따릅니다.

  1. 8x8 행렬 생성

    4 0 0 3 0 0 0 4
    0 1 0 0 0 2 0 0
    0 0 1 0 0 0 3 0
    3 0 0 1 0 0 0 3
    0 0 0 0 1 0 0 0
    0 2 0 0 0 2 0 0
    0 0 3 0 0 0 3 0
    4 0 0 3 0 0 0 5
    
  2. 15x15 매트릭스로 확장

    4 0 0 3 0 0 0 4 0 0 0 3 0 0 4
    0 1 0 0 0 2 0 0 0 2 0 0 0 1 0
    0 0 1 0 0 0 3 0 3 0 0 0 1 0 0
    3 0 0 1 0 0 0 3 0 0 0 1 0 0 3
    0 0 0 0 1 0 0 0 0 0 1 0 0 0 0
    0 2 0 0 0 2 0 0 0 2 0 0 0 2 0
    0 0 3 0 0 0 3 0 3 0 0 0 3 0 0
    4 0 0 3 0 0 0 5 0 0 0 3 0 0 4
    0 0 3 0 0 0 3 0 3 0 0 0 3 0 0
    0 2 0 0 0 2 0 0 0 2 0 0 0 2 0
    0 0 0 0 1 0 0 0 0 0 1 0 0 0 0
    3 0 0 1 0 0 0 3 0 0 0 1 0 0 3
    0 0 1 0 0 0 3 0 3 0 0 0 1 0 0
    0 1 0 0 0 2 0 0 0 2 0 0 0 1 0
    4 0 0 3 0 0 0 4 0 0 0 3 0 0 4
    
  3. 'DtdTX.'원하는 결과를 얻기 위해 해당 행렬로 문자열 을 색인화하십시오 .

1 단계

4        % Push 4
t:       % Duplicate, range: pushes [1 2 3 4]
g        % Logical: convert to [1 1 1 1]
2I5      % Push 2, then 3, then 5
v        % Concatenate all stack vertically into vector [4 1 1 1 1 2 3 5]
Xd       % Generate diagonal matrix from that vector

이제 0이 아닌 비 대각선 항목을 채워야합니다. 우리는 대각선 아래의 것을 채우고 대칭을 사용하여 다른 것을 채 웁니다.

각 값을 채우기 위해 선형 인덱싱을 사용합니다 ( 이 답변 , 길이 -12 스 니펫 참조). 그것은 마치 마치 하나의 차원을 가진 것처럼 매트릭스에 액세스하는 것을 의미합니다. 8 × 8 행렬의 경우 선형 인덱스의 각 값은 다음과 같이 항목을 나타냅니다.

1   9         57
2  10         58
3  11
4  
5  ...       ...
6  
7             63
8  16 ... ... 64

따라서 다음은 왼쪽 하단 항목에 값 4를 지정합니다.

K        % Push 4
8        % Push 8
(        % Assign 4 to the entry with linear index 8

값 3의 코드는 비슷합니다. 이 경우 색인은 벡터입니다. 여러 항목을 채워야하기 때문입니다.

3        % Push 3
K        % Push 4
23h      % Push 23 and concatenate horizontally: [4 23]
32h      % Push 32 and concatenate horizontally: [4 23 32]
(        % Assign 4 to the entries specified by that vector

그리고 2 :

H        % Push 2
14       % Push 14
(        % Assign 2 to that entry

우리는 이제 행렬을

4 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0
0 0 1 0 0 0 0 0
3 0 0 1 0 0 0 0
0 0 0 0 1 0 0 0
0 2 0 0 0 2 0 0
0 0 3 0 0 0 3 0
4 0 0 3 0 0 0 5

상반부를 채우기 위해 대칭을 활용합니다.

t!       % Duplicate and transpose
XR       % Keep the upper triangular part without the diagonal
+        % Add element-wise

2 단계

스택에는 이제 1 단계의 결과 인 8 × 8 행렬이 포함됩니다.이 행렬을 확장하기 위해 이번에는 2 차원으로 인덱싱을 사용합니다.

8:       % Push vector [1 2 ... 7 8]
7:P      % Push vector [7 6 ... 1]
h        % Concatenate horizontally: [1 2 ... 7 8 7 ... 2 1]. This will be the row index
t        % Duplicate. This will be the column index
3$       % Specify that the next function will take 3 inputs
)        % Index the 8×8 matrix with the two vectors. Gives a 15×15 matrix

3 단계

스택에는 이제 2 단계에서 생성 된 15 × 15 매트릭스가 포함됩니다.

'DtdTX.' % Push this string
w        % Swap the two elements in the stack. This brings the matrix to the top
)        % Index the string with the matrix

이것은 정말, 정말 멋지다.
AdmBorkBork

길이가 8 인 벡터를 생성하기 위해 8자를 사용하면 조금 '가려움'이기는하지만 일반적으로이 답변이 마음에 듭니다. 수학 시퀀스로 숫자를 얻는 것을 고려해 보셨습니까? 아직 달콤한 것을 찾지 못했지만 특히 마지막 7 개는 멋진 패턴을 보여줍니다. 예를 들어 ceil ((1 : 7) ^ 4 / 500)
Dennis Jaheruddin

@DennisJ 감사합니다! 예, 너무 느낍니다. 나중에 전화로 해보도록하겠습니다
Luis Mendo

8

루비, 103 97 바이트

반복에서 6 바이트 개선을위한 Mitch Schwartz에게 감사합니다.

a=(-7..7).map &:abs
a.map{|i|puts a.map{|j|(d=i%7-j%7)%4<1?'X d t DTDdDdDtT d'[i+j+d*d/3]:?.}*''}

아래의 원래 답변과 비슷하지만 크게 다른 접근법. 이전과 마찬가지로 i%7-j%70 또는 4와 같으면 문자를 인쇄해야한다는 사실을 사용 하지만 여기서는 그 차이를 저장 d하고 수식 i+j+d*d/3을 사용하여 특정 색 사각형에 고유 한 (대칭까지) 정수를 제공합니다. 그런 다음 우리는 그것을 마법의 끈에서 찾아 보았습니다.

재미를 위해서만 : 이 접근법의 C 버전, 120 바이트

z,i,j,d;f(){for(z=240;z--;)i=abs(z%16-8),j=abs(z/16-7),putchar(i-8?(d=i%7-j%7)%4?46:"X d t DTDdDdDtT d"[i+j+d*d/3]:10);}

루비, 115 113 바이트

Value Ink 덕분에 2 바이트가 절약되었습니다.

(k=-7..7).map{|y|k.map{|x|i=x.abs;j=y.abs
$><<=(i%7-j%7)%4<1?"#{'XdTdT'[(i+j)/3]}dtDDDD"[[i%7,j%7].min]:?.}
puts}

설명

원점은 보드의 중심으로 간주됩니다.

정사각형의 x 및 y 좌표의 크기가 4와 같거나 다른 경우 문자를 인쇄해야합니다. 예외는 보드의 바깥 쪽 가장자리에 있지만 예외는 중앙의 행 / 열과 동일한 패턴을 따릅니다. x와 y 좌표를 모듈로 7로 가져와도 같은 조건을 사용할 수 있습니다.

표시되는 문자 선택은 최소 크기의 좌표를 기반으로합니다. 이러한 방식으로 (1,5) 및 (2,6)의 더블 및 트리플은 (1,1) 및 (2,2)와 동일한 규칙을 따르며 7 문자열에서 얻 "#{formula}dtDDDD"습니다. 모든 변형을 다루지는 않습니다. 가장자리와 중심선 사각형의 경우 문자열의 첫 번째 문자는 공식에서 계산됩니다 'XdTdT'[(i+j)/3].

(k=-7..7).map{|y|
  k.map{|x|
    i=x.abs;j=y.abs
    print (i%7-j%7)%4<1?      #IF this expression is true print a letter 
    "#{'XdTdT'[(i+j)/3]       #select 1st character of magic string where [i%7,j%7].min==0 
     }dtDDDD"[[i%7,j%7].min]: #remaining 6 characters of magic string for diagonal
    ?.                        #ELSE print .
  }
  puts                        #at the end of the row print a newline
}

(k=-7..7).map{|y|k.map{...이중 -7.upto(7)기술 보다 2 바이트 짧습니다 .
Value Ink

6 바이트를 절약하기위한 몇 가지 수정 사항 :a=(-7..7).map &:abs;a.map{|i|puts a.map{|j|(d=i%7-j%7)%4<1?'X d t DTDdDdDtT d'[i+j+d*d/3]:?.}*''}
Mitch Schwartz

7

brainfuck , 598 596 590 바이트

골프 팁을 환영합니다.

>-[++++[<]>->+]<[>++++>+++++>+++>++<<<<-]>[>>>>+>+>+<<<<<<-]<++++++++++[>+>>>>+>-<<<<<<-]>>+>->>-->++.<<..>.<...>>.<<...>.<..>>.<<<<<.>>>.<.>...<<.>>...<<.>>...<.>.<<<.>>>..<.>...>.<.>.<...<.>..<<<.>>>>.<..<.>...>.<...<.>..>.<<<<.>>>....<.>.....<.>....<<<.>>>.<<.>>...<<.>>...<<.>>...<<.>>.<<<.>>>..>.<...>.<.>.<...>.<..<<<.>>>>>.<<..>.<...>>>----.<<<...>.<..>>.<<<<<.>>>..>.<...>.<.>.<...>.<..<<<.>>>.<<.>>...<<.>>...<<.>>...<<.>>.<<<.>>>....<.>.....<.>....<<<.>>>>.<..<.>...>.<...<.>..>.<<<<.>>>..<.>...>.<.>.<...<.>..<<<.>>>.<.>...<<.>>...<<.>>...<.>.<<<.>>>>>.<<..>.<...>>.<<...>.<..>>.

설명

테이프를 [10116 68 46100 84 92],[nl t D. d T \]

>-[++++[<]>->+]<[>++++>+++++>+++>++<<<<-]>[>>>>+>+>+<<<<<<-]<++++++++++[>+>>>>+>-<<<<<<-]>>+>->>-->++

여기의 각 줄은 보드의 한 줄을 인쇄합니다.
중간 선도 감소합니다92 to 88 i.e. \ to X

.<<..>.<...>>.<<...>.<..>>.<<<<<.
>>>.<.>...<<.>>...<<.>>...<.>.<<<.
>>>..<.>...>.<.>.<...<.>..<<<.
>>>>.<..<.>...>.<...<.>..>.<<<<.
>>>....<.>.....<.>....<<<.
>>>.<<.>>...<<.>>...<<.>>...<<.>>.<<<.
>>>..>.<...>.<.>.<...>.<..<<<.
>>>>>.<<..>.<...>>>----.<<<...>.<..>>.<<<<<.
>>>..>.<...>.<.>.<...>.<..<<<.
>>>.<<.>>...<<.>>...<<.>>...<<.>>.<<<.
>>>....<.>.....<.>....<<<.
>>>>.<..<.>...>.<...<.>..>.<<<<.
>>>..<.>...>.<.>.<...<.>..<<<.
>>>.<.>...<<.>>...<<.>>...<.>.<<<.
>>>>>.<<..>.<...>>.<<...>.<..>>.

온라인으로 사용해보십시오!


1
BF를위한 팁 : BF에서 골프를 아스키하지 마십시오. 그래도 좋은 전략.
Magic Octopus Urn

5

PowerShell v2 +, 147 바이트

($x='T..d...T...d..T')
($y='.D...t..','..D...d.','d..D...d','....D...','.t...t..','..d...d.'|%{$_+-join$_[6..0]})
$x-replace'.T.','.X.'
$y[5..0]
$x

Write-Output프로그램 실행이 끝날 때 기본값 이 배열을 처리 하는 방법을 활용 합니다 (즉, 요소 ​​사이에 개행을 삽입 함). 보드의 중간 부분을 생성하는 더 좋은 방법 일 수 있습니다. 저는 여전히 작업 중입니다.

첫 번째 라인은 보드의 상단 라인을 출력하고 $x나중에 사용하기 위해 저장합니다 .

다음 행은 각각의 왼쪽 "반쪽"을 가져 와서 ( -join$_[6..0]명령문) 미러링하고 요소를 array의 요소로 저장하여 모든 Double-Word 행을 생성합니다 $y.

다음 줄은 가운데 행이며 X가운데 덕분에 -replace입니다.

다음 라인 $y은 역순으로 출력 되어 하단 더블 워드 라인을 제공합니다.

마지막 줄은 $x또 다시입니다.

PS C:\Tools\Scripts\golfing> .\draw-empty-scrabble-board.ps1
T..d...T...d..T
.D...t...t...D.
..D...d.d...D..
d..D...d...D..d
....D.....D....
.t...t...t...t.
..d...d.d...d..
T..d...X...d..T
..d...d.d...d..
.t...t...t...t.
....D.....D....
d..D...d...D..d
..D...d.d...D..
.D...t...t...D.
T..d...T...d..T

5

> <> (물고기), 153 바이트

\!o;!?l
\'T..d...T...d..T'a'.D...t...t...D.'a'..D...d.d...D..'a'd..D...d...D..d'a'....D.....D....'a'.t...t...t...t.'a'..d...d.d...d..'a'T..d...'
\'X/'02p

끔찍하고 끔찍하며 비효율적 인 일을하는 방법. 현재 수평 및 수직으로 올바르게 미러링하여 단축하는 방법을 찾고 있습니다.

온라인으로 사용해보십시오! 하루 종일 가고 싶지 않다면 실행 속도를 최대로 설정하거나 애니메이션없이 실행하십시오.


4

C, 146 145 142 138 바이트

i,r,c;main(){for(;i<240;)r=abs(i/16-7),c="T..12..0..12..0"[r+7-abs(i%16-7)],putchar(++i%16?c&4?c:"Xd.dd.tt.D..D.dD.dD.tTd."[c%4+r*3]:10);}

온라인으로 사용해보십시오!

Level River St 덕분에 1 바이트 5 바이트 절약

이것은 인코딩을 위해 보드의 대각선 패턴을 이용합니다. 특히 보드의 왼쪽 상단 사분면을 가져 와서 대각선을 정렬하면 다음과 같은 결과가 나타납니다.

       T..d...T
      .D...t..
     ..D...d.
    d..D...d
   ....D...
  .t...t..
 ..d...d.
T..d...X

... 이제 많은 열이 정렬됩니다. 이런 식으로 열을 한 줄로 인코딩하면 :

       0..12..0 y/012/Td./
      .0..12..  y/012/D.t/
     ..0..12.   y/012/D.d/
    2..0..12    y/012/D.d/
   12..0..1     y/012/D../
  .12..0..      y/012/tt./
 ..12..0.       y/012/dd./
T..12..0        y/012/Xd./

... 그런 다음 보드 패턴을 15 자 문자열로 축소 할 수 있습니다. T..12..0..12..0; 각 행에 대한 올바른 매핑이 필요합니다.

이를 염두에두고 설명이 포함 된 확장 버전이 있습니다.

i,r,c;
main() {
   for(;i<240;)  // one char per output including new line
   r=abs(i/16-7) // row; goes from 7 to 0 and back to 7.
   , c="T..12..0..12..0"[r+7-abs(i%16-7)] // pattern char
   , putchar(++i%16 // if this is 0 we need a new line
   ? c&4 // hash to distinguish 'T' and '.' from '0', '1', '2'
     ? c // print 'T' and '.' literally
     : "Xd.dd.tt.D..D.dD.dD.tTd."[c%4+r*3] // otherwise look up replacement char
   : 10 // print the new line
   );
}

아주 좋아요 1. 프로그램 대신 함수를 제출할 수 있으므로 i,r,c;f()괜찮습니다. 2 (i%16-7)%8.-> i%16-7&73. 내 생각에 c-48-> c%4효과가 있습니까?
레벨 리버 St

죄송합니다. 함수는 재사용 f()할 수 있어야 i=0하므로 함수를 저장하지 않으려면 함수 내부에 추가 기능 이 필요합니다 .
Level River St

의견 주셔서 감사합니다! 2도 작동하지 않습니다 ( %8구현의 음의 모듈러스를 사용하여 % 16 값을 0..15에서 -7..7로 &7매핑하십시오 ; 이것을 0..7,0..7로 매핑하십시오). 그러나 예, 3은 절대적으로 작동합니다 ... 기회를 받으면 업데이트됩니다.
H Walters

@LevelRiverSt Mea culpa; 2는 여전히 엄격히 작동하지는 않지만 어쨌든 그 물건은 필요하지 않았습니다.
H Walters

3

05AB1E , 57 53 바이트

암호

•jd]31‚ŽÔc¦Ïïì¹Ep.Üì8Ìa;“•6B4ÝJ".TdDt"‡5'.3×:Â'Xý15ô»

CP-1252 인코딩을 사용합니다 . 온라인으로 사용해보십시오!


설명 (오래됨)

•4ç“–šã&$W§ñçvßÖŠ_æá_VFÛÞýi~7¾¬ÏXôc•5B이 번호로 압축 해제 :

1002000100020010400030003000400040002020004002004000200040020000400000400000300030003000300020002020002001002000

을 사용 4ÝJ".TdtD"‡하여이 큰 숫자로 다음을 음역합니다.

0 -> .
1 -> T
2 -> d
3 -> t
4 -> D

전체 문자열을 분기하여 문자열과 문자열을 스택에서 뒤집은 상태로두고를 "X"사용하여 결합합니다 ý. 우리는 th 15ô코드를 사용하여 전체 문자열을 15 조각으로 나누고를 사용하여 개행으로 전체 배열을 결합합니다 ».


û€û내장되어 있어야합니다;).
Magic Octopus Urn

2

파이썬 3, 138 바이트

d=lambda s:s+s[-2::-1]
print(*d(list(map(d,'T..d...T .D...t.. ..D...d. d..D...d ....D... .t...t.. ..d...d. T..d...X '.split()))),sep='\n')

변경 list(map(A))하려면 [*map(A)], 3 바이트 (파이썬을 필요로 3.5) 저장합니다.
shooqie

2

05AB1E , 49 44 바이트

•1nÑ=}íge/Þ9,ÑT‰yo¬iNˆå•6B8ôû€û»5ÝJ".TtdDX"‡

온라인으로 사용해보십시오!

설명 :

푸시: 1003000104000200004000303004000300004000020002000030003010030005

8 개의 덩어리로 나눠서 각각을 회문하십시오.

다시 회담하십시오.

숫자를 문자로 바꾸십시오.


다른 아이디어 (MATL에서 누군가 시도해보십시오)

모든 것을 보는 것은 그 사이에 마침표가 있다는 것입니다 ...

각 조각 사이의 제로 수를 세십시오.

1003000104000200004000303004000300004000020002000030003010030005
^  ^   ^ ^   ^    ^   ^ ^  ^   ^    ^    ^   ^    ^   ^ ^  ^   ^

131424334342233135 => w\F6ß¿

0을 세면 다음과 같이 실행됩니다.

23134312344343123 => ì:¼˜¾

그런 다음 암호를 해독하고 함께 바꿉니다.

05AB1E에서 사용 (+5 바이트 증가) :

05AB1E , 27 바이트

•w\F6ß¿•6BS•ì:¼˜¾•5BS0ׂøJJ

시도 해봐...


메타 골프 항목 :

05AB1E , 104 바이트

•G¨J´JÏÍ?»"”Ö3úoÙƒ¢y”vf%¯‚6À°IÕNO’Å2Õ=ÙŠxn®žÑŸ¶¼t¨š,Ä]ÓŽÉéȺÂ/ø‡ŸÖ|e³J—Ë'~!hj«igċ΂wî’©•7BžLR"
.DTXdt"‡

시도 해봐!

메타 golfed ASCII 아트 내 메타 골퍼를 사용하여 : https://tio.run/nexus/05ab1e#JY9NSgNBEIWvUo4/qAQxyfi30yAioiAiuBM6M9U9DT3doao7ccBFrhI3ooss3QguJniRXCR2x01RfK9479Xqtf2@XHy2H78/tw/L6aydq8VXr5sPsuX0LeP1jCwbJD3r54v3dp5mFGbZzWp1wXBPyLpE6@GRQj0C1spiCQJ4gjjSVgG@YBG8HiM4KpHAWbgiXYqmA1wF79ONrxCGa5nBOyCUQSEyCFuCi2LEklwNjGO0YAQpNA3cBTa6hsIF60kjd9Y@jAWhF9SAk1C5Gk1yiTSQ9g1MBKcKAp4q7RGuXWCMFlYioS3iKowBhf@9Kh2DNbEHGSIexhSZeDRIUcq4oTDxDS09aAsjZ3TRHGycb25tP@/s7@51e/386Pjk9OzwDw


1

자바 스크립트 (ES6), 150 바이트

_=>(r='',"T2d3T3d2T.D3t3t3D3D3d.d3D2d2D3d3D2d4D5D5t3t3t3t3d3d.d3d2T2d3".replace(/./g,c=>(c=+c?'.'.repeat(c):c,r=c+r,c))+'X'+r).match(/.{15}/g).join`
`

작동 원리

문자열 "T2d3T3d2T.D3t3t3D3D3d.d3D2d2D3d3D2d4D5D5t3t3t3t3d3d.d3d2T2d3"은 왼쪽 상단부터 'X'직전의 사각형까지 보드를 설명하며 연속 된 빈 사각형은 숫자로 인코딩됩니다. 이 replace()함수는 빈 사각형을 풀고 미러 문자열을 만듭니다.r 보드 바닥에 을 . 그런 다음 두 부분이 모두 합쳐지고 15 자마다 캐리지 리턴이 삽입됩니다.

데모

let f =
_=>(r='',"T2d3T3d2T.D3t3t3D3D3d.d3D2d2D3d3D2d4D5D5t3t3t3t3d3d.d3d2T2d3".replace(/./g,c=>(c=+c?'.'.repeat(c):c,r=c+r,c))+'X'+r).match(/.{15}/g).join`
`
console.log(f())


1

자바 스크립트 (ES6), 221 바이트

f=
_=>(a=[...Array(15)].map(_=>Array(15).fill`.`),r=([c,i,j])=>[a[i][j]=a[k=14-i][j]=a[i][j=14-j]=a[k][j]=c,j,i],[..."TDDDDtdX"].map((c,i)=>r([c,i,i])),"d30t51d62d73T70".replace(/.../g,s=>r(r(s))),a.map(a=>a.join``).join`
`)
;o.textContent=f()
<pre id=o>

내가 이것을 생성하는 데 어려움을 겪었 기 때문에 분명히 탁월한 솔루션이 있지만 어쨌든 게시 할 것이라고 생각했습니다.


1

C 234 바이트

#define g(t) while(i++<8)putchar(*b++);b-=2;--i;while(--i>0)putchar(*b--);putchar('\n');b+=t;
char*r="T..d...T.D...t....D...d.d..D...d....D....t...t....d...d.T..d...X";i;f(){char*b=r;do{g(9);}while(*b);b-=16;do{g(-7);}while(b>=r);}

출력은 다음과 같습니다.

T..d...T...d..T
.D...t...t...D.
..D...d.d...D..
d..D...d...D..d
....D.....D....
.t...t...t...t.
..d...d.d...d..
T..d...X...d..T
..d...d.d...d..
.t...t...t...t.
....D.....D....
d..D...d...D..d
..D...d.d...D..
.D...t...t...D.
T..d...T...d..T

1

, 33 바이트 (비경쟁)

이 답변에 대한 모든 크레딧은 @DLosc 로갑니다 .

T↑↑↘tdd↗→→↖XdtDDDD↓T..d‖O⟦↗→↓⟧UB.

온라인으로 사용해보십시오!

말 수가 많은

Print("T")
Move(:Up)
Move(:Up)
Print(:DownRight, "tdd")
Move(:UpRight)
Move(:Right)
Move(:Right)
Print(:UpLeft, "XdtDDDD")
Print(:Down, "T..d")
ReflectOverlap([:UpRight, :Right, :Down])
SetBackground(".")

온라인으로 사용해보십시오!


대각선 인쇄 기능을 갖춘이 과제를위한 완벽한 도구입니다. +1 (그리고 ASCII와 같은 배경 방법을 볼 수도 있습니다)
Kevin Cruijssen

0

하스켈, 114 바이트

g=(++)<*>reverse.init
unlines$g$g<$>words"T..d...T .D...t.. ..D...d. d..D...d ....D... .t...t.. ..d...d. T..d...X"

gnon-pointfree 버전은 g x = x ++ (reverse (init x))입니다. (하프) 라인 당 한 번 적용되고 결과에 다시 적용됩니다.


0

sh + coreutils, 119 bytes

This is a binary file. Shown as hexdump:

00000000  74 61 69 6c 20 2d 63 39  34 20 24 30 7c 67 75 6e  |tail -c94 $0|gun|
00000010  7a 69 70 0a 65 78 69 74  0a 1f 8b 08 00 2e ec ca  |zip.exit........|
00000020  57 00 03 65 4f c9 0d c0  30 08 fb 7b 18 4f 91 11  |W..eO...0..{.O..|
00000030  fc e8 00 1e a1 fb ab 08  68 a4 90 07 60 d9 98 43  |........h...`..C|
00000040  a4 49 8a 59 05 ae 40 6f  c7 22 98 84 b3 29 10 fc  |.I.Y..@o."...)..|
00000050  13 59 1d 7a 11 9d b1 bd  15 a8 56 77 26 54 c4 b3  |.Y.z......Vw&T..|
00000060  f7 0d fd f6 9f f3 ef fd  e7 7d f3 7e 8d ff 3e 05  |.........}.~..>.|
00000070  57 d9 a0 f0 00 00 00                              |W......|
00000077

Here's the base64 form so you can copy/paste it:

begin-base64 755 test.sh
dGFpbCAtYzk0ICQwfGd1bnppcApleGl0Ch+LCAAu7MpXAANlT8kNwDAI+3sY
T5ER/OgAHqH7qwhopJAHYNmYQ6RJilkFrkBvxyKYhLMpEPwTWR16EZ2xvRWo
VncmVMSz9w399p/z7/3nffN+jf8+BVfZoPAAAAA=
====

0

C 230 228 Bytes

char *s="T.D..Dd..D....D.t...t..d...dT..d...X";
int x,y,a,b;
#define X(N) {putchar(s[a]);N y<=x?1:y;}
#define P for(y=1;y<8;y++)X(a+=)for(y--;y+1;y--)X(a-=)puts("");
main(){for(;x<8;x++){a=b+=x;P}for(x=6;x+1;x--){a=b-=(x+1);P}}

try it on ideone

This is an attempt at improving the original C version posted that had quarter of board stored in a C array. Not as short as I was hoping for. This version only has one eighth of the board stored.

Ungolfed:

char *s="T.D..Dd..D....D.t...t..d...dT..d...X";
int x,y,a,b;
main(){
    for(x = 0; x < 8; x++){
        a=b+=x;
        for(y = 1; y < 8; y++){
            putchar(s[a]);
            a += y<=x ? 1 : y;
        }
        for(y--; y >= 0; y--){
            putchar(s[a]);
            a -= y<=x ? 1 : y;
        }
        puts("");
    }
    for(x=6; x >= 0; x--){
        a=b-=(x+1);
        for(y = 1; y < 8; y++){
            putchar(s[a]);
            a += y<=x ? 1 : y;
        }
        for(y--; y >= 0; y--){
            putchar(s[a]);
            a-= y<=x ? 1 : y;
        }
        puts("");
    }
}

0

GNU sed, 219 205 bytes

s/$/T..d...T...d..T/p;h
s/.*/.D...t...t...D./p;G;h
s/.*/..D...d.d...D../p;G;h
s/.*/d..D...d...D..d/p;G;h
s/.*/....D.....D..../p;G;h
s/.*/.t...t...t...t./p;G;h
s/.*/..d...d.d...d../p;G;h
s/.*\n//;s/T/X/2p;g

Taking advantage of the mirror symmetry of the board, the second half is the first one that was stored in reverse order in the hold space.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.