Permainan catur Cina dimainkan di papan dengan spasi berbentuk bintang berujung enam:
Kita dapat membuat representasi ASCII-art dari papan ini, menggunakan .
untuk tempat-tempat kosong dan surat-surat GYORPB
untuk enam lokasi awal berwarna:
G
G G
G G G
G G G G
B B B B . . . . . Y Y Y Y
B B B . . . . . . Y Y Y
B B . . . . . . . Y Y
B . . . . . . . . Y
. . . . . . . . .
P . . . . . . . . O
P P . . . . . . . O O
P P P . . . . . . O O O
P P P P . . . . . O O O O
R R R R
R R R
R R
R
Untuk membuatnya lebih menarik, kita juga bisa mengubah ukurannya. Kami akan mengukur ukuran papan dengan panjang sisi dari lokasi awal segitiga: papan di atas adalah ukuran 4.
Karena sangat sulit untuk mengetik semua itu dengan tangan, mari kita menulis sebuah program (atau fungsi) untuk melakukannya!
Detail
Kode Anda harus mengambil bilangan bulat positif yang mewakili ukuran papan, melalui STDIN, ARGV, atau argumen fungsi. Keluarkan pola kotak-kotak ke STDOUT (Anda dapat secara bergantian mengembalikannya sebagai string jika kiriman Anda adalah fungsi).
Output juga harus
- tidak memiliki spasi sama sekali, atau
- memiliki cukup ruang trailing yang cukup untuk mengisi polanya menjadi persegi panjang sempurna dengan lebar 6 * N + 1.
Keluaran dapat secara opsional memiliki baris tambahan. Tidak ada spasi putih tambahan (terkemuka, tertinggal) yang diizinkan.
Contohnya
Ukuran 1:
G
B . . Y
. . .
P . . O
R
Ukuran 2:
G
G G
B B . . . Y Y
B . . . . Y
. . . . .
P . . . . O
P P . . . O O
R R
R
Ukuran 4:
G
G G
G G G
G G G G
B B B B . . . . . Y Y Y Y
B B B . . . . . . Y Y Y
B B . . . . . . . Y Y
B . . . . . . . . Y
. . . . . . . . .
P . . . . . . . . O
P P . . . . . . . O O
P P P . . . . . . O O O
P P P P . . . . . O O O O
R R R R
R R R
R R
R
Mencetak gol
Ini adalah kode-golf : kode terpendek dalam byte menang.
Jawaban:
Ruby,
141127Mengembalikan string persegi panjang
Tidak digabungkan dalam program uji
sumber
Python 2, 140 byte
Tidak hebat, tapi inilah tawaran awal saya.
Aturan spasi putih menambahkan banyak byte. Sebagai perbandingan, inilah program Python 3 120 byte yang hanya benar secara visual, dan tidak mengikuti aturan spasi putih:
Dan inilah upaya Python 3 149 rekursif saya yang sedikit lebih lama:
sumber
Python 2, 152
Ini, dalam retrospeksi, pendekatan yang salah untuk Python, tapi saya mempostingnya di sini kalau-kalau ada yang bisa memanfaatkannya. Daripada menjelaskan kekacauan kode ini, saya akan mencoba mengatakan ide di baliknya.
Idenya adalah untuk menggunakan koordinat segitiga , di mana kisi segitiga sesuai dengan bilangan bulat tiga kali lipat
(a,b,c)
dengana+b+c=0
.(Di sini, titik-titik kisi digambarkan sebagai segi enam.)
Kami dapat mengonversi koordinat Cartesian menjadi yang segitiga sebagai
mencatat itu
x
dany
harus memiliki paritas yang sama, atau selain itu kotak-kotak dan kita harus mencetak spasi.Dalam koordinat segitiga, garis pembatas dari bintang bersisi enam memiliki persamaan:
a==n, b==n, c==n, a==-n, b==-n, c==-n
.Jadi, kita bisa menentukan wilayah mana
[a,b,c,-a,-b,-c]
yang lebih besar dari kitan
.Rectangle pembatas mengharuskan kita melakukan ini
x
dalam interval tertutup [-2 * n, 2 * n] dany
dalam interval tertutup [-3 * n, 3 * n].sumber
Retina , 234 byte
Mengambil input di unary.
Setiap baris harus menuju ke file sendiri dan
#
harus diubah ke baris baru di file. Ini tidak praktis tetapi Anda dapat menjalankan kode seperti halnya satu file dengan-s
flag, menjaga#
marka dan mungkin mengubahnya menjadi baris baru di output agar mudah dibaca jika diinginkan.Kode ini memiliki kompleksitas regex minimal. Langkah-langkah utama dalam generasi adalah sebagai berikut:
G
baris terakhir dan baris pertamaB.Y
(dibatasi oleh markerijk
dan letetrs yang digunakan sebenarnyaRPO
).G
garis paling atas dengan spasi plus, minus G hingga hanya ada satu G.B.Y
dengan ruang plus dan titik, minus aB
danY
sampai tidak adaB
danY
tersisa.q
). Kami menyimpan penanda (w
) di tengah.RPO
keGBY
jika mereka sebelum penanda.Hasil setelah masing-masing poin di atas (dibatasi oleh
=
's) untuk input1111 (unary 4)
:sumber
JavaScript ( ES6 ) 228
Konstruksi garis demi garis. Sangat lama dibandingkan dengan @ Sp3000 yang melakukan hal yang sama.
Menggunakan string template untuk menyimpan 3 byte lebih banyak untuk baris baru. Semua baris baru signifikan dan dihitung.
sumber