Gambarlah Papan Kosong Scrabble


28

Papan Scrabble standar adalah kisi ruang 15x15 untuk menempatkan ubin huruf. Sebagian besar ruang kosong tetapi ada juga skor kata ganda (pink), skor tiga kata (merah), skor huruf ganda (biru muda), dan skor tiga huruf (biru). Biasanya ada bintang di tengah (yang dihitung sebagai skor kata ganda).

Papan scrabble

Tulis program atau fungsi yang menampilkan papan Scrabble kosong standar dalam bentuk ASCII di mana:

  • . mewakili ruang kosong

  • D mewakili skor kata ganda

  • T mewakili skor tiga kata

  • d mewakili skor huruf ganda

  • t mewakili skor tiga huruf

  • X mewakili bintang tengah

Yaitu, hasil pasti Anda harus

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

opsional diikuti oleh baris baru yang tertinggal.

Kode terpendek dalam byte menang.


Mengapa Xdan tidak *mewakili bintang? : o
Fatalkan

6
*terlalu tinggi dan perkasa.
Calvin Hobbies

Mengapa tidak ? : D
mbomb007

5
@ mbomb007 Non-ASCII char dalam tantangan ASCII-art? Bidat !
Luis Mendo

Jawaban:


16

MATL , 59 54 52 byte

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

Cobalah online!

Penjelasan

Kode ini mengikuti tiga langkah utama:

  1. Hasilkan matriks 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. Perluas ke matriks 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. Indeks string 'DtdTX.'dengan matriks itu untuk menghasilkan hasil yang diinginkan.

Langkah 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

Sekarang kita perlu mengisi entri off-diagonal bukan nol. Kami hanya akan mengisi yang di bawah diagonal, dan kemudian menggunakan simetri untuk mengisi yang lain.

Untuk mengisi setiap nilai, kami menggunakan pengindeksan linear (lihat jawaban ini , potongan-12 panjang). Itu berarti mengakses matriks seolah-olah hanya memiliki satu dimensi. Untuk matriks 8 × 8, setiap nilai indeks linier mengacu pada entri sebagai berikut:

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

Jadi, yang berikut ini menetapkan nilai 4 ke entri kiri bawah:

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

Kode untuk nilai 3 serupa. Dalam hal ini indeks adalah vektor, karena kita perlu mengisi beberapa entri:

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

Dan untuk 2:

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

Kami sekarang memiliki matriks

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

Untuk mengisi setengah bagian atas kita mengeksploitasi simetri:

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

Langkah 2

Tumpukan sekarang berisi matriks 8 × 8 yang dihasilkan dari langkah 1. Untuk memperpanjang matriks ini kami menggunakan pengindeksan, kali ini dalam dua dimensi.

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

Langkah 3

Tumpukan sekarang berisi matriks 15 × 15 yang dihasilkan dari langkah 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

Ini benar-benar keren.
AdmBorkBork

Saya suka jawaban ini secara umum, meskipun 'gatal' sedikit karena Anda menggunakan 8 karakter untuk membuat vektor dengan panjang 8. Apakah Anda mempertimbangkan untuk mendapatkan angka dengan urutan matematika? Belum menemukan sesuatu yang manis, tetapi terutama 7 terakhir menunjukkan pola yang bagus. Misalnya ceil ((1: 7) ^
4/500

@DennisJ Terima kasih! Ya, rasanya terlalu banyak. Saya akan mencobanya nanti, di telepon sekarang
Luis Mendo

8

Ruby, 103 97 byte

Terima kasih kepada Mitch Schwartz untuk peningkatan 6 byte pada iterasi.

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

Pendekatan serupa tetapi sangat berbeda dengan jawaban asli saya di bawah ini. Seperti sebelumnya, kita menggunakan fakta bahwa huruf harus dicetak jika i%7-j%7sama dengan 0 atau 4. Tapi di sini kita menyimpan perbedaan itu ddan menggunakan rumus i+j+d*d/3untuk memberikan bilangan bulat yang unik (hingga simetri) ke kotak berwarna tertentu. Lalu kita cari saja di senar ajaib.

Hanya untuk bersenang-senang: Versi C dari pendekatan ini, 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 disimpan berkat Value 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}

Penjelasan

Asal dianggap sebagai pusat dewan.

Sebuah huruf harus dicetak jika koordinat x dan y dari bujur sangkar memiliki magnitudo yang sama atau berbeda dengan 4. Satu-satunya pengecualian adalah di tepi luar papan, tetapi ini mengikuti pola yang sama dengan baris tengah / kolom dari papan, sehingga kita dapat menggunakan kondisi yang sama jika kita mengambil koordinat x dan y modulo 7.

Pilihan huruf yang ditampilkan didasarkan pada koordinat besarnya minimum. Dengan cara ini, ganda dan tiga kali lipat pada (1,5) dan (2,6) mengikuti aturan yang sama seperti pada (1,1) dan (2,2) dan diperoleh dari string 7 karakter. "#{formula}dtDDDD"Ini tidak mencakup semua variasi untuk bujur sangkar dan garis tengah, sehingga karakter pertama dari string dihitung dari rumus '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{...lebih pendek 2 byte dari -7.upto(7)teknik ganda Anda .
Value Ink

Beberapa modifikasi untuk menghemat 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

Selamat datang tips golf.

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

Penjelasan

Inisialisasi kaset ke [10 116 68 46 100 84 92] yaitu [nl t D. d T]

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

Setiap baris di sini kemudian mencetak satu baris papan.
Garis tengah juga berkurang92 to 88 i.e. \ to X

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

Cobalah online!


1
Kiat untuk BF: jangan main golf di BF; strategi yang bagus.
Magic Octopus 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

Mengambil keuntungan dari bagaimana default Write-Outputdi akhir eksekusi program menangani array (yaitu, ia memasukkan baris baru antar elemen). Mungkin cara yang lebih baik untuk menghasilkan papan tengah - saya masih bekerja di sana.

Baris pertama menampilkan baris teratas papan, juga menyimpannya $xuntuk digunakan nanti.

Baris berikutnya menghasilkan semua baris Kata-Ganda dengan mengambil "setengah" kiri masing-masing, mencerminkan mereka ( -join$_[6..0]pernyataan), dan menyimpannya sebagai elemen dalam array $y.

Baris berikutnya adalah baris tengah, dengan tanda Xtengah, terima kasih -replace.

Baris berikutnya menampilkan $ydalam urutan terbalik, memberi kita baris Kata-Ganda bawah.

Baris terakhir hanyalah $xlagi.

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

> <> (Ikan), 153 Bytes

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

Cara yang mengerikan, sangat, tidak efisien dalam melakukan sesuatu. Saat ini mencari cara untuk memperpendeknya dengan mirroring baik secara horizontal dan vertikal dengan benar.

Cobalah online! (Jika Anda tidak ingin berada di sana sepanjang hari, pastikan Anda mengatur kecepatan eksekusi ke max atau berjalan tanpa animasi.)


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

Cobalah online!

1 byte 5 byte disimpan berkat Level River St

Ini mengeksploitasi pola diagonal papan untuk pengkodean. Secara khusus, jika kita mengambil kuadran kiri atas papan dan menyelaraskan diagonal, kita mendapatkan:

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

... banyak kolom sekarang berbaris. Jika kami menyandikan kolom dalam garis seperti ini:

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

... maka pola papan dapat diciutkan menjadi string 15 karakter: T..12..0..12..0 ; dan kita hanya perlu pemetaan yang tepat untuk setiap baris.

Dengan mengingat hal itu, inilah versi yang diperluas dengan komentar:

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

Sangat bagus. 1. Anda dapat mengirimkan fungsi alih-alih program, jadi i,r,c;f()tidak masalah. 2. (i%16-7)%8-> i%16-7&73. Saya pikir c-48-> c%4berfungsi, bukan?
Level River St

Ups, maaf, fungsi harus dapat digunakan kembali, jadi f()akan membutuhkan tambahan i=0di dalam fungsi sehingga tidak akan menyimpan apa pun.
Level River St

Terima kasih atas komentarnya! 2 juga tidak akan bekerja ( %8menggunakan moduli negatif implementasi untuk memetakan% 16 nilai 0..15 hingga -7.77; &7akan memetakan ini ke 0..7.0..7). Tapi, ya, 3 akan benar-benar berfungsi ... akan diperbarui ketika saya mendapat kesempatan.
H Walters

@LevelRiverSt Mea culpa; Saya masih tidak akan benar-benar bekerja, tetapi saya tetap tidak membutuhkannya.
H Walters

3

05AB1E , 57 53 byte

Kode

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

Menggunakan pengkodean CP-1252 . Cobalah online!


Penjelasan (kedaluwarsa)

The •4ç“–šã&$W§ñçvßÖŠ_æá_VFÛÞýi~7¾¬ÏXôc•5Bdecompress ke nomor ini:

1002000100020010400030003000400040002020004002004000200040020000400000400000300030003000300020002020002001002000

Dengan 4ÝJ".TdtD"‡, kami mentransliterasikan yang berikut dalam jumlah besar ini:

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

Kami membagi dua seluruh string, meninggalkan string dan string terbalik pada tumpukan dan bergabung dengan mereka "X"menggunakan ý. Kami membagi seluruh string menjadi 15 bagian menggunakan 15ôkode th dan bergabung dengan seluruh array dengan menggunakan baris baru ».


û€ûharus built-in;).
Magic Octopus 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')

Ubah list(map(A))ke [*map(A)], simpan 3 byte (membutuhkan Python 3.5+).
shooqie

2

05AB1E , 49 44 byte

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

Cobalah online!

Dijelaskan:

Dorong: 1003000104000200004000303004000300004000020002000030003010030005

Dibagi menjadi 8 bagian, palindromize masing-masing.

Palindromize lagi.

Ganti angka dengan karakter.


Ide Lain (Seseorang Coba ini di MATL)

Melihat SEGALA SESUATU yang harus memiliki periode antara itu ...

Hitung jumlah nol di antara setiap bagian:

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

131424334342233135 => w\F6ß¿

Mengambil hitungan nol berjalan:

23134312344343123 => ì:¼˜¾

Maka Anda akan mendekripsi dan memindahkannya bersama.

Menggunakannya di 05AB1E (menghasilkan peningkatan +5 byte):

05AB1E , 27 byte

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

Cobalah...


Entri meta-golf:

05AB1E , 104 byte

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

Cobalah!

Meta-golfed menggunakan saya meta-pegolf untuk seni 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`
`

Bagaimana itu bekerja

String "T2d3T3d2T.D3t3t3D3D3d.d3D2d2D3d3D2d4D5D5t3t3t3t3d3d.d3d2T2d3"menggambarkan papan dari sudut kiri atas ke alun-alun tepat sebelum 'X', dengan kotak kosong berturut-turut dikodekan sebagai digit. The replace()Fungsi kedua membongkar kotak kosong dan membangun string cermin runtuk bagian bawah papan. Kemudian kedua bagian disatukan dan carriage return dimasukkan setiap 15 karakter.

Demo

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>

Karena saya kesulitan membuat ini, saya pikir saya tetap akan mempostingnya meskipun ada solusi yang jelas unggul


1

C 234 Bytes

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

Inilah hasilnya:

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

Arang , 33 byte (tidak bersaing)

Semua kredit untuk jawaban ini ke @DLosc .

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

Cobalah online!

Verbose

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

Cobalah online!


Alat yang sempurna untuk tantangan ini, dengan kemampuan pencetakan diagonal. +1 (dan juga keren untuk melihat metode latar belakang seperti itu untuk 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"

gdalam versi non-pointfree adalah g x = x ++ (reverse (init x)). Ini diterapkan sekali per (setengah) garis dan sekali lagi pada hasilnya.


0

sh + coreutils, 119 byte

Ini adalah file biner. Tampil sebagai 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

Inilah formulir base64 sehingga Anda dapat menyalin / menempelkannya:

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

coba di ideone

Ini adalah upaya untuk meningkatkan versi C asli yang diposting yang memiliki seperempat papan disimpan dalam array C. Tidak sesingkat yang saya harapkan. Versi ini hanya memiliki seperdelapan dari papan yang disimpan.

Tidak Terkumpul:

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

Mengambil keuntungan dari simetri cermin papan, babak kedua adalah yang pertama yang disimpan dalam urutan terbalik di ruang penahanan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.