Ringkasan
Terinspirasi oleh popularitas baru-baru ini tantangan seni ASCII, tujuan tantangan ini adalah untuk menggambar kotak-kotak ASCII, seperti yang di mana Catur dapat dimainkan.
Tulis program yang menggunakan bilangan bulat positif n
sebagai argumen, dalam stdin
, atau sebagai input pengguna, dan output kotak-kotak dengan n
x n
kotak, bersama dengan perbatasan yang tebal 1 karakter.
Setiap kotak harus 2x2 karakter. Kotak harus mengikuti pola bolak-balik putih-hitam normal (putih pertama, seperti di sudut kiri atas) dari kotak-kotak. Kotak putih harus dibuat dari karakter space ( ), dan kotak hitam harus dibuat dari
#
karakter pound ( ).
Perbatasan harus dibuat dari tanda hubung ( -
) dengan tanda tambah ( +
) pada batas atau titik tegak lurus sebuah kotak.
Memasukkan
Bilangan bulat positif dalam merepresentasikan jumlah kotak (dimensi dalam kotak) untuk menggambar di kotak-kotak, dengan setiap kotak menjadi 2x2 karakter.
Contoh Hasil
n=2
+--+--+
| |##|
| |##|
+--+--+
|##| |
|##| |
+--+--+
n=3
+--+--+--+
| |##| |
| |##| |
+--+--+--+
|##| |##|
|##| |##|
+--+--+--+
| |##| |
| |##| |
+--+--+--+
n=4
+--+--+--+--+
| |##| |##|
| |##| |##|
+--+--+--+--+
|##| |##| |
|##| |##| |
+--+--+--+--+
| |##| |##|
| |##| |##|
+--+--+--+--+
|##| |##| |
|##| |##| |
+--+--+--+--+
... dan seterusnya.
Catatan
- Ruang tambahan dan garis baru dapat diterima.
- Anda dapat menulis seluruh program atau fungsi.
- Tidak ada ruang utama.
- Program Anda harus menampilkan hasil yang benar untuk n = 15.
- Untuk bahasa esoteris yang kurang dikenal dan sejenisnya, berikan tautan ke bahasa tersebut.
n=0
harus menghasilkan+
. (opsional, tetapi sangat dianjurkan dan dianjurkan.)- Kode terpendek dalam byte menang, karena ini adalah kode golf.
+
untukn=0
.Jawaban:
J, 24 byte
Fungsi anonim:
Pemakaian:
sumber
&.>
lebih pendek dari satueach
. Layak untuk dicatat bahwa ini hanya berfungsi jikaBoxForm
diatur keASCII
.Python 2, 79
Untuk setiap baris, pilih salah satu pola
dan mencetak
3*n+1
karakter dari itu. Pola ini dipilih dengan mengulangi 6 karakter pertama, dipilih dengan trik interleaving string, yang juga berfungsi untuk mengekstrak potongan dari panjang yang benar.Pola yang benar dipilih berdasarkan nilai indeks baris
i
modulo 6 oleh ekspresi aritmatika3**i%7/2%3
yang memberikan pola berulang [0,1,1,0,2,2]. Saya menemukannya menggunakan fakta yangx**i%7
memiliki periode6
, kemudian mencoba nilai yangx
berbeda dan postprocessing yang berbeda untuk mendapatkan pola yang tepat.sumber
Pyth, 37
Agak diretas bersama, tapi pendek.
Demonstrasi.
sumber
CJam,
4342 byteCobalah online .
Setiap koordinat dipetakan ke char, misalnya sudut kiri atas
(0, 0) -> "+"
. Secara khusus, kami menghitungdan indeks ke dalam string yang
"#|-+ "
sesuai.sumber
Retina , 106 byte
Mengambil input sebagai unary (berdasarkan diskusi meta ini ).
Setiap baris harus menuju ke file sendiri dan
n
harus diubah ke baris baru di file. Ini tidak praktis tetapi Anda dapat menjalankan kode seperti, sebagai satu file, dengan-s
bendera, menjagan
spidol. Anda dapat mengubahn
's ke baris baru di output untuk dibaca jika Anda inginkan. Misalnya:Golf lebih lanjut dan beberapa penjelasan datang kemudian.
sumber
JavaScript (ES6), 117
Potongan:
Fungsi anonim. Mulai dengan serangkaian penuh
+--+--+--...
garis, dan pada garis yang sesuai, menggantikan+
untuk|
dan-
untukatau yang
#
sesuai.Ekspresi yang menentukan karakter pengganti,,
"| |##| "[x%6+(i%6>2)*3]
mungkin bisa di-golf lebih lanjut, tetapi saya telah menemukan bahwa menggunakan string yang lebih lama dan redundan menyimpan lebih banyak karakter daripada perhitungan yang rumit.sumber
CJam, 59 byte
Ini .. terlalu .. panjang ..
Cobalah online di sini
sumber
CoffeeScript dengan ES6, 106 byte
JavaScript (ES6), 111 byte
Baris baru signifikan dan masing-masing dihitung sebagai 1 byte.
Pengembalian eksplisit membuatnya sedikit lebih lama:
Demo
Pada saat penulisan, Firefox adalah satu-satunya browser utama yang kompatibel dengan ES6.
sumber
Python 3,
114 108100Solusi sebelumnya
108
114
118 (tidak dikirim)
sumber
CJam, 46 byte
Cobalah online
Yah, saya berharap bahwa saya setidaknya akan memiliki solusi asli (saya biasanya tidak melihat jawaban lain sebelum mengerjakan sendiri). Ternyata @ Sp3000 sudah melakukan sesuatu yang sangat mirip, hanya saja lebih baik. Tapi karena saya sudah melakukan pekerjaan, saya pikir saya akan tetap mempostingnya.
Penjelasan:
sumber
HackVM , 158 byte
Jelas bukan pemenang, tetapi ini tampak seperti tantangan yang bagus untuk dilakukan di HVM.
Tempatkan ukuran ke dalam sel memori pertama dan gunakan kode berikut:
Catatan: Kode harus tepat dalam satu baris agar berfungsi.
Penjelasan:
Kode ini memanggil 2 fungsi
PLUSHDASHLINE
danNORMALLINE
, mempertahankan status global untuk paritas (yaitu apakah akan menempatkan a' '
atau a'#'
di dalam sel).Penjelasan untuk
PLUSDASHLINE
:Penjelasan untuk
NORMALLINE
:Sangat menghargai jika seseorang memberikan tips untuk meningkatkannya lebih lanjut :)
sumber
Python 2, 98
Bukan cara terpendek, tetapi metode yang lucu. Fungsi
f
mengambil dua stringa,b
dan pemisahs
dan interleave argumennya sepertisaasbbsaasbbsaas
. Baris-baris papan dibuat dalam bentuk ini dengan karakter masing-masing, kemudian disisipkan sendiri dengan cara ini untuk menghasilkan hasilnya.sumber
n=0
. Mayoritas solusi (yang akan diterima) menghasilkan "+". Solusi ini menghasilkan "++ (baris baru) ++", tidak termasuk baris normal 2 baru (yang diizinkan).Ruby: 83 karakter
Contoh dijalankan:
sumber
Ruby, 87
Ini adalah fungsi anonim. Sebut saja seperti ini (semua kemungkinan dari 0 hingga 5)
Itu menggunakan
ljust
metode pada string kosong. Ruby memungkinkan string padding ditentukan untuk justifikasi, jadi kami menggunakanljust
dengan salah satu dari tiga string padding yang mungkinb,c,d
per arraya
, dipesan sebagaibccbdd
.sumber
Julia, 124 byte
Ini menciptakan fungsi tanpa nama yang menerima integer dan mencetak ke stdout.
Penjelasan + tidak dikumpulkan:
sumber
Javascript, ES6 149
Cukup menyenangkan untuk menulis meskipun agak panjang
Bekerja pada firefox
1 - Buka konsol
2 - Ketikkan yang berikut ini
Output (n = 15):
sumber
join('\n')
denganjoin` `
, di mana ruang saya menulis menunjukkan suatu karakter baris baru yang sebenarnya.Haskell, 99
Ini sebagian terinspirasi oleh jawaban Haskell sebelumnya oleh catgocat ; Saya menulis versi saya sendiri, lalu melihatnya, lalu menulis yang lain. Saya bermain dengan aturan yang sama - input adalah argumen, tetapi outputnya stdout. (Jika itu bisa menjadi fungsi murni, kurangi 7 karakter
putStr$
.)Kami menggunakan
t
untuk mengambil wilayah 3 n +1 karakter dari kotak-kotak tak terbatas yang dibangun menggunakancycle
, dan hanya itu. Gagasan utama yang saya ambil dari jawaban lain adalah bahwa menempatkan pola-pola sel perbatasan dan pemeriksa bersama-sama dalam string.Versi pertama saya (140 karakter) menggunakan strategi penghitungan karakter di setiap titik, yang mungkin lebih baik untuk masalah yang lebih kompleks daripada yang ini.
sumber
cat <<EOF > sol1.hs
dan terus bertambahdu -b sol1.hs
.wc
setuju, dan saya memeriksa karakter yang tidak tercetak. Apakah versi 84 byte ini berjalan ? Jika demikian, saya akan menerimanya :)Haskell, 118
Ini adalah jawaban kode haskell golf pertama saya dan ini dia:
Versi yang lebih mudah dibaca:
Keluaran
sumber
f 1
harus menghasilkan 1 kotak kosong,f 0
hanya menghasilkan tanda plus.C -
119101Menggunakan perhitungan yang mirip dengan jawaban @ Sp3000 sekarang. Juga beberapa optimasi.
Saya pikir itu
?:
adalah ekstensi GCC ...Jawaban lama:
Ia memelihara 2 koordinat dan dengan jujur menghitung karakter mana yang akan dicetak untuk setiap pasangan. Daftar karakter yang akan dicetak disimpan dalam array dan ini saja mencetak kotak "tidak berwarna". Elemen pertama array dimodifikasi untuk menggambar kotak hitam.
Saya mungkin mengubah ini sehingga alih-alih dua koordinat independen itu satu nilai menghitung atau (mungkin bahkan lebih baik) turun, tetapi tidak dapat membungkus kepala saya di sekitar itu sekarang.
Bonus - mengganti 3 dengan nomor lainnya menghasilkan program yang menarik kotak-kotak yang valid dengan ukuran sel yang berbeda.
sumber
awk - 91
Cukup perjuangan untuk mendapatkannya di bawah 100. Menghitung mundur dan menggunakan operator pertandingan adalah terobosan;) Sisanya cukup banyak logika langsung.
sumber
Pyke, 47 byte, tidak bersaing
Coba di sini!
sumber