Vẽ một bảng Scrabble trống


28

Một bảng Scrabble tiêu chuẩn là một lưới 15 × 15 không gian để đặt các ô chữ. Hầu hết các khoảng trắng đều trống nhưng một số là điểm số từ kép (màu hồng), điểm ba từ (màu đỏ), điểm chữ kép (màu xanh nhạt) và điểm ba chữ cái (màu xanh). Thường có một ngôi sao ở chính giữa (được tính là một từ kép).

Bảng xếp hạng

Viết chương trình hoặc chức năng tạo ra bảng Scrabble tiêu chuẩn, trống ở dạng ASCII trong đó:

  • . đại diện cho một không gian trống

  • D đại diện cho một số từ kép

  • T đại diện cho một số điểm ba từ

  • d đại diện cho một số điểm thư đôi

  • t đại diện cho một số điểm ba chữ cái

  • X đại diện cho ngôi sao trung tâm

Đó là, đầu ra chính xác của bạn phải là

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

tùy chọn theo sau là một dòng mới.

Mã ngắn nhất tính bằng byte thắng.


Tại sao Xvà không *đại diện cho ngôi sao? : o
Gây tử vong vào

6
*quá cao và hùng mạnh.
Sở thích của Calvin

Tại sao không ? : D
mbomb007

5
@ mbomb007 char không phải ASCII trong thử thách nghệ thuật ASCII? Dị giáo !
Luis Mendo

Câu trả lời:


16

MATL , 59 54 52 byte

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

Hãy thử trực tuyến!

Giải trình

Mã theo ba bước chính:

  1. Tạo ma trận 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. Mở rộng nó sang ma trận 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. Lập chỉ mục chuỗi 'DtdTX.'với ma trận đó để tạo ra kết quả mong muốn.

Bước 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

Bây giờ chúng ta cần điền vào các mục không chéo. Chúng tôi sẽ chỉ điền những cái bên dưới đường chéo, và sau đó sử dụng tính đối xứng để điền vào những cái khác.

Để điền vào từng giá trị, chúng tôi sử dụng lập chỉ mục tuyến tính (xem câu trả lời này , đoạn dài 12 đoạn). Điều đó có nghĩa là truy cập vào ma trận như thể nó chỉ có một chiều. Đối với ma trận 8 × 8, mỗi giá trị của chỉ số tuyến tính đề cập đến một mục như sau:

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

Vì vậy, sau đây gán giá trị 4 cho mục dưới bên trái:

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

Mã cho giá trị 3 là tương tự. Trong trường hợp này, chỉ mục là một vectơ, bởi vì chúng ta cần điền vào một số mục:

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

Và cho 2:

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

Bây giờ chúng ta có ma trận

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

Để lấp đầy nửa trên, chúng ta khai thác tính đối xứng:

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

Bước 2

Bây giờ ngăn xếp chứa ma trận 8 × 8 kết quả từ bước 1. Để mở rộng ma trận này, chúng tôi sử dụng lập chỉ mục, lần này theo hai chiều.

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

Bước 3

Bây giờ ngăn xếp chứa ma trận 15 × 15 từ bước 2.

'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

Cái đó thật sự rất, rất mát mẻ.
admBorkBork

Tôi thích câu trả lời này nói chung, mặc dù nó 'ngứa' một chút khi bạn sử dụng 8 ký tự để tạo một vectơ có độ dài 8. Bạn đã xem xét việc lấy các số bằng một chuỗi toán học chưa? Không tìm thấy bất cứ điều gì ngọt ngào nhưng đặc biệt là 7 cuối cùng cho thấy một mô hình tốt đẹp như vậy. Ví dụ: trần ((1: 7) ^
4/500

@DennisJ Cảm ơn! Vâng, nó cảm thấy quá nhiều. Tôi sẽ thử điều đó sau, trên điện thoại ngay bây giờ
Luis Mendo

8

Ruby, 103 97 byte

Cảm ơn Mitch Schwartz đã cải thiện 6 byte trên các lần lặp.

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]:?.}*''}

Một cách tiếp cận tương tự nhưng khác biệt đáng kể với câu trả lời ban đầu của tôi dưới đây. Như trước đây, chúng ta sử dụng thực tế là một chữ cái phải được in nếu i%7-j%7bằng 0 hoặc 4. Nhưng ở đây chúng ta lưu trữ sự khác biệt đó dvà sử dụng công thức i+j+d*d/3để đưa ra một số nguyên duy nhất (đối xứng) với hình vuông có màu cụ thể đó. Sau đó, chúng tôi chỉ cần tìm nó trong chuỗi ma thuật.

Chỉ để giải trí: Phiên bản C của phương pháp này, 120 byte

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

Ruby, 115 113 byte

2 byte được lưu nhờ vào Ink Ink.

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

Giải trình

Nguồn gốc được coi là trung tâm của hội đồng quản trị.

Một chữ cái phải được in nếu tọa độ x và y của hình vuông có độ lớn giống hệt nhau hoặc khác nhau 4. Các ngoại lệ duy nhất nằm ở cạnh ngoài của bảng, nhưng chúng theo cùng một mẫu với hàng / cột trung tâm của bảng, vì vậy chúng ta có thể sử dụng điều kiện tương tự nếu chúng ta lấy tọa độ x và y modulo 7.

Sự lựa chọn của chữ được hiển thị dựa trên tọa độ cường độ tối thiểu. Theo cách này, nhân đôi và nhân ba tại (1,5) và (2,6) tuân theo quy tắc tương tự như tại (1,1) và (2,2) và được lấy từ chuỗi 7 ký tự "#{formula}dtDDDD"Điều này không bao gồm tất cả các biến thể đối với các hình vuông cạnh và trung tâm, do đó, ký tự đầu tiên của chuỗi được tính từ công thức '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{...ngắn hơn 2 byte so với -7.upto(7)kỹ thuật kép của bạn .
Mực giá trị

Một vài sửa đổi để lưu 6 byte: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 byte

Lời khuyên chơi golf chào mừng.

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

Giải trình

Khởi tạo băng thành [10 116 68 46 100 84 92] tức là [nl t D. d T \]

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

Mỗi dòng ở đây sau đó in một dòng của bảng.
Đường giữa cũng giảm92 to 88 i.e. \ to X

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

Hãy thử trực tuyến!


1
Lời khuyên cho BF: đừng chơi golf trong BF; chiến lược tốt đẹp mặc dù.
Bạch tuộc ma thuật Urn

5

PowerShell v2 +, 147 byte

($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

Tận dụng lợi thế của cách mặc định Write-Outputở cuối thực hiện chương trình xử lý các mảng (nghĩa là, nó chèn một dòng mới giữa các phần tử). Có thể là một cách tốt hơn để tạo ra giữa bảng - Tôi vẫn đang làm việc với nó.

Dòng đầu tiên xuất ra dòng trên cùng của bảng, cũng lưu trữ nó $xđể sử dụng sau.

Dòng tiếp theo tạo ra tất cả các dòng Double-Word bằng cách lấy "một nửa" bên trái của mỗi dòng, phản chiếu chúng ( -join$_[6..0]câu lệnh) và lưu trữ chúng dưới dạng các phần tử trong mảng $y.

Dòng tiếp theo là hàng giữa, với một Xở giữa, nhờ -replace.

Dòng tiếp theo xuất ra $ytheo thứ tự ngược lại, cung cấp cho chúng tôi dòng Double-Word dưới cùng.

Dòng cuối cùng chỉ là $xmột lần nữa.

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

> <> (Cá), 153 byte

\!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

Một cách làm kinh khủng, khủng khiếp, không hiệu quả. Hiện đang xem xét một cách rút ngắn nó xuống bằng cách phản chiếu cả theo chiều ngang và chiều dọc đúng.

Hãy thử trực tuyến! (Nếu bạn không muốn ở đó cả ngày, hãy đảm bảo bạn đặt tốc độ thực hiện ở mức tối đa hoặc chạy mà không có hình động.)


4

C, 146 145 142 138 byte

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

Hãy thử trực tuyến!

1 byte 5 byte được lưu nhờ vào Level River St

Điều này khai thác mô hình đường chéo của bảng để mã hóa. Cụ thể, nếu chúng ta lấy góc phần tư phía trên bên trái của bảng và căn chỉnh đường chéo, chúng ta sẽ nhận được:

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

... rất nhiều cột hiện đang xếp hàng. Nếu chúng ta mã hóa các cột theo một cách này:

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

... Sau đó, mẫu bảng có thể được thu gọn thành chuỗi 15 ký tự : T..12..0..12..0; và chúng ta chỉ cần ánh xạ đúng cho mỗi hàng.

Với ý nghĩ đó, đây là một phiên bản mở rộng với các bình luận:

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

Rất đẹp. 1. bạn có thể gửi một chức năng thay vì một chương trình, như vậy i,r,c;f()là tốt. 2. (i%16-7)%8-> i%16-7&73. Tôi nghĩ c-48-> c%4hoạt động, phải không?
Cấp sông St

Rất tiếc, các chức năng phải được sử dụng lại, do đó f()sẽ yêu cầu bổ sung i=0bên trong chức năng để nó không lưu bất cứ thứ gì.
Cấp sông St

Cảm ơn ý kiến! 2 sẽ không hoạt động ( %8sử dụng các mô đun phủ định của việc triển khai để ánh xạ% 16 giá trị 0..15 đến -7..7; &7sẽ ánh xạ điều này thành 0..7,0..7). Nhưng, vâng, 3 sẽ hoàn toàn hoạt động ... sẽ cập nhật khi tôi có cơ hội.
H Walters

@LevelRiverSt Mea culpa; 2 vẫn không hoàn toàn làm việc, nhưng dù sao tôi cũng không cần thứ đó.
H Walters

3

05AB1E , 57 53 byte

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

Sử dụng mã hóa CP-1252 . Hãy thử trực tuyến!


Giải thích (lỗi thời)

Giải •4ç“–šã&$W§ñçvßÖŠ_æá_VFÛÞýi~7¾¬ÏXôc•5Bnén cho số này:

1002000100020010400030003000400040002020004002004000200040020000400000400000300030003000300020002020002001002000

Với 4ÝJ".TdtD"‡, chúng tôi chuyển ngữ sau đây trong số lớn này:

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

Chúng tôi chia đôi toàn bộ chuỗi, để lại chuỗi và chuỗi đảo ngược trên ngăn xếp và nối chúng bằng "X"cách sử dụng ý. Chúng tôi chia toàn bộ chuỗi thành 15 phần bằng cách sử dụng 15ômã thứ và tham gia toàn bộ mảng theo dòng mới bằng cách sử dụng ».


û€ûnên là một tích hợp;).
Bạch tuộc ma thuật Urn

2

Python 3, 138 byte

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')

Thay đổi list(map(A))thành [*map(A)], lưu 3 byte (yêu cầu Python 3.5+).
shooqie

2

05AB1E , 49 44 byte

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

Hãy thử trực tuyến!

Giải thích:

Đẩy: 1003000104000200004000303004000300004000020002000030003010030005

Chia thành 8 phần, palindromize mỗi.

Palindromize một lần nữa.

Thay số bằng ký tự.


Ý tưởng khác (Ai đó hãy thử điều này trong MATL)

Xem như MỌI THỨ là để có một khoảng thời gian giữa nó ...

Đếm số lượng số không ở giữa mỗi phần:

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

131424334342233135 => w\F6ß¿

Lấy số lượng các số không chạy:

23134312344343123 => ì:¼˜¾

Sau đó, bạn sẽ giải mã và hoán đổi chúng lại với nhau.

Sử dụng chúng trong 05AB1E (kết quả tăng +5 byte):

05AB1E , 27 byte

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

Thử nó...


Entry-golfed:

05AB1E , 104 byte

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

Thử nó!

Meta-golfed sử dụng tôi meta-vận động viên golf cho nghệ thuật ASCII: https://tio.run/nexus/05ab1e#JY9NSgNBEIWvUo4/qAQxyfi30yAioiAiuBM6M9U9DT3doao7ccBFrhI3ooss3QguJniRXCR2x01RfK9479Xqtf2@XHy2H78/tw/L6aydq8VXr5sPsuX0LeP1jCwbJD3r54v3dp5mFGbZzWp1wXBPyLpE6@GRQj0C1spiCQJ4gjjSVgG@YBG8HiM4KpHAWbgiXYqmA1wF79ONrxCGa5nBOyCUQSEyCFuCi2LEklwNjGO0YAQpNA3cBTa6hsIF60kjd9Y@jAWhF9SAk1C5Gk1yiTSQ9g1MBKcKAp4q7RGuXWCMFlYioS3iKowBhf@9Kh2DNbEHGSIexhSZeDRIUcq4oTDxDS09aAsjZ3TRHGycb25tP@/s7@51e/386Pjk9OzwDw


1

Javascript (ES6), 150 byte

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

Làm thế nào nó hoạt động

Chuỗi "T2d3T3d2T.D3t3t3D3D3d.d3D2d2D3d3D2d4D5D5t3t3t3t3d3d.d3d2T2d3"mô tả bảng từ góc trên cùng bên trái của nó đến hình vuông ngay trước chữ 'X', với các ô vuông trống liên tiếp được mã hóa dưới dạng chữ số. Các replace()chức năng cả hai giải nén các ô vuông trống và xây dựng chuỗi gương rcho dưới cùng của bảng. Sau đó, cả hai phần được đặt lại với nhau và trả về vận chuyển được chèn cứ sau 15 ký tự.

Bản giới thiệu

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

JavaScript (ES6), 221 byte

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>

Vì tôi gặp rắc rối với việc tạo ra cái này nên tôi nghĩ dù sao tôi cũng sẽ đăng nó mặc dù có một giải pháp rõ ràng vượt trội.


1

C 234 byte

#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);}

Đây là đầu ra:

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

Than , 33 byte (không biên dịch)

Tất cả tín dụng cho câu trả lời này được chuyển đến @DLosc .

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

Hãy thử trực tuyến!

Rực rỡ

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(".")

Hãy thử trực tuyến!


Công cụ hoàn hảo cho thử thách này, với khả năng in chéo. +1 (và cũng thật tuyệt khi thấy một phương thức nền như thế đối với ASCII)
Kevin Cruijssen

0

Haskell, 114 byte

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"

gtrong một phiên bản không có điểm là g x = x ++ (reverse (init x)). Nó được áp dụng một lần trên mỗi (một nửa) dòng và một lần nữa vào kết quả.


0

sh + coreutils, 119 byte

Đây là một tập tin nhị phân. Hiển thị dưới dạng 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

Đây là mẫu base64 để bạn có thể sao chép / dán nó:

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

0

C 230 228 byte

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

thử nó trên ideone

Đây là một nỗ lực cải thiện phiên bản C gốc được đăng có một phần tư bảng được lưu trữ trong một mảng C. Không ngắn như tôi đã hy vọng. Phiên bản này chỉ có một phần tám của bảng được lưu trữ.

Ung dung:

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 byte

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

Tận dụng tính đối xứng gương của bảng, nửa sau là nửa đầu tiên được lưu theo thứ tự ngược lại trong không gian giữ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.