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).
Tulis program atau fungsi yang menampilkan papan Scrabble kosong standar dalam bentuk ASCII di mana:
.
mewakili ruang kosongD
mewakili skor kata gandaT
mewakili skor tiga katad
mewakili skor huruf gandat
mewakili skor tiga hurufX
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.
code-golf
ascii-art
kolmogorov-complexity
board-game
scrabble
Hobi Calvin
sumber
sumber
X
dan tidak*
mewakili bintang? : o*
terlalu tinggi dan perkasa.★
? : DJawaban:
MATL ,
595452 byteCobalah online!
Penjelasan
Kode ini mengikuti tiga langkah utama:
Hasilkan matriks 8x8
Perluas ke matriks 15x15
Indeks string
'DtdTX.'
dengan matriks itu untuk menghasilkan hasil yang diinginkan.Langkah 1
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:
Jadi, yang berikut ini menetapkan nilai 4 ke entri kiri bawah:
Kode untuk nilai 3 serupa. Dalam hal ini indeks adalah vektor, karena kita perlu mengisi beberapa entri:
Dan untuk 2:
Kami sekarang memiliki matriks
Untuk mengisi setengah bagian atas kita mengeksploitasi simetri:
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.
Langkah 3
Tumpukan sekarang berisi matriks 15 × 15 yang dihasilkan dari langkah 2.
sumber
Ruby,
10397 byteTerima kasih kepada Mitch Schwartz untuk peningkatan 6 byte pada iterasi.
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%7
sama dengan 0 atau 4. Tapi di sini kita menyimpan perbedaan itud
dan menggunakan rumusi+j+d*d/3
untuk 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
Ruby,
115113 byte2 byte disimpan berkat Value Ink.
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]
.sumber
(k=-7..7).map{|y|k.map{...
lebih pendek 2 byte dari-7.upto(7)
teknik ganda Anda .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]:?.}*''}
brainfuck ,
598596590 byteSelamat 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 berkurang
92 to 88 i.e. \ to X
Cobalah online!
sumber
PowerShell v2 +, 147 byte
Mengambil keuntungan dari bagaimana default
Write-Output
di 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
$x
untuk 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
X
tengah, terima kasih-replace
.Baris berikutnya menampilkan
$y
dalam urutan terbalik, memberi kita baris Kata-Ganda bawah.Baris terakhir hanyalah
$x
lagi.sumber
> <> (Ikan), 153 Bytes
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.)
sumber
C,
146145142138 byteCobalah online!
1 byte5 byte disimpan berkat Level River StIni mengeksploitasi pola diagonal papan untuk pengkodean. Secara khusus, jika kita mengambil kuadran kiri atas papan dan menyelaraskan diagonal, kita mendapatkan:
... banyak kolom sekarang berbaris. Jika kami menyandikan kolom dalam garis seperti ini:
... 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:
sumber
i,r,c;f()
tidak masalah. 2.(i%16-7)%8
->i%16-7&7
3. Saya pikirc-48
->c%4
berfungsi, bukan?f()
akan membutuhkan tambahani=0
di dalam fungsi sehingga tidak akan menyimpan apa pun.%8
menggunakan moduli negatif implementasi untuk memetakan% 16 nilai 0..15 hingga -7.77;&7
akan memetakan ini ke 0..7.0..7). Tapi, ya, 3 akan benar-benar berfungsi ... akan diperbarui ketika saya mendapat kesempatan.05AB1E ,
5753 byteKode
Menggunakan pengkodean CP-1252 . Cobalah online!
Penjelasan (kedaluwarsa)
The
•4ç“–šã&$W§ñçvßÖŠ_æá_VFÛÞýi~7¾¬ÏXôc•5B
decompress ke nomor ini:Dengan
4ÝJ".TdtD"‡
, kami mentransliterasikan yang berikut dalam jumlah besar ini: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 menggunakan15ô
kode th dan bergabung dengan seluruh array dengan menggunakan baris baru»
.sumber
û€û
harus built-in;).Python 3, 138 byte
sumber
list(map(A))
ke[*map(A)]
, simpan 3 byte (membutuhkan Python 3.5+).05AB1E ,
4944 byteCobalah 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:
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
Cobalah...
Entri meta-golf:
05AB1E , 104 byte
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
sumber
Javascript (ES6), 150 byte
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. Thereplace()
Fungsi kedua membongkar kotak kosong dan membangun string cerminr
untuk bagian bawah papan. Kemudian kedua bagian disatukan dan carriage return dimasukkan setiap 15 karakter.Demo
sumber
JavaScript (ES6), 221 byte
Karena saya kesulitan membuat ini, saya pikir saya tetap akan mempostingnya meskipun ada solusi yang jelas unggul
sumber
C 234 Bytes
Inilah hasilnya:
sumber
Arang , 33 byte (tidak bersaing)
Semua kredit untuk jawaban ini ke @DLosc .
Cobalah online!
Verbose
Cobalah online!
sumber
Haskell, 114 byte
g
dalam versi non-pointfree adalahg x = x ++ (reverse (init x))
. Ini diterapkan sekali per (setengah) garis dan sekali lagi pada hasilnya.sumber
sh + coreutils, 119 byte
Ini adalah file biner. Tampil sebagai hexdump:
Inilah formulir base64 sehingga Anda dapat menyalin / menempelkannya:
sumber
C
230228 Bytescoba 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:
sumber
GNU sed,
219205 byteMengambil keuntungan dari simetri cermin papan, babak kedua adalah yang pertama yang disimpan dalam urutan terbalik di ruang penahanan.
sumber