Berikut adalah biskuit asin ASCII :
_________________
| . . . |
| . . |
| . . . |
| . . |
| . . . |
|_________________|
Berikut adalah dua cracker yang ditumpuk:
_________________
| . . . |
| . __________|______
| . | . . . |
| .| . . |
| . | . . . |
|______| . . |
| . . . |
|_________________|
Tuliskan program sesingkat mungkin yang membutuhkan bilangan bulat positif dan gambar setumpuk banyak biskuit asin ASCII itu.
Input dapat berasal dari stdin, baris perintah, atau Anda cukup menulis fungsi. Masukan akan selalu valid. Output harus pergi ke stdout atau alternatif terdekat.
Setiap cracker yang ditumpuk selalu digeser ke bawah 2 karakter dan 7 karakter dari cracker di bawahnya. Seharusnya tidak ada spasi tambahan atau baris baru yang asing.
Program terpendek dalam byte menang.
Contohnya
Jika inputnya adalah 1
output
_________________
| . . . |
| . . |
| . . . |
| . . |
| . . . |
|_________________|
Jika inputnya adalah 2
output
_________________
| . . . |
| . __________|______
| . | . . . |
| .| . . |
| . | . . . |
|______| . . |
| . . . |
|_________________|
Jika inputnya adalah 3
output
_________________
| . . . |
| . __________|______
| . | . . . |
| .| . __________|______
| . | . | . . . |
|______| .| . . |
| . | . . . |
|______| . . |
| . . . |
|_________________|
Dan seterusnya.
code-golf
ascii-art
kolmogorov-complexity
Hobi Calvin
sumber
sumber
___|___
bukan_______
. Saya kira itu akan terlihat aneh jika itu yang terakhirJawaban:
CJam,
140125119116 byteCobalah online.
Satu garam saja
Cuplikan kode
meninggalkan yang berikut di tumpukan:
Asin yang ditumpuk
Asumsikan asin dari atas disimpan dalam Z.
sumber
JavaScript (E6) 249
259 289 304 345Tidak begitu yakin tentang kompresi string.Menemukan kompresi yang baik untuk string.Kasus sederhana 1 cracker tampaknya sulit dikelola. Mungkin ada cara yang lebih baik ...Tidak digabungkan kurang lebih
Itu adalah kode dasar, sebelum saya mulai bermain golf. Ini tidak persis sama dan hanya berfungsi untuk n> 2
Uji di konsol FireFox / FireBug
Keluaran
sumber
Python,
252241 karakterTerima kasih kepada FryAmTheEggman dan Vincent yang telah memotong 11 karakter.
Sebagian besar kerupuk:
Kode ini tampaknya sangat tidak efisien, tetapi jawaban lain akan memberi tahu. Ini hanya menyalin dan menempelkan cracker asin ke dalam array di tempat yang tepat, menyumbang cracker terbawah menjadi 1 karakter, lalu mencetak semuanya.
Saya dapat menurunkannya hingga 230 karakter jika saya menggunakan file eksternal (kode 202 + 38 ukuran file + 1 nama file).
sumber
n=1 upto 2^10
sehingga kami dapat memastikan bahwa program Anda benar-benar melakukan hal yang benar.list(' '*(7*N+12))
bisa jadi[' ']*(7*N+12)
.G=[list(' '*(7*N+12))for _ in R(2*N+5)]
denganG=map(list,[' '*(7*N+12)]*(2*N+5))
Perl 189
Mencuri beberapa ide kompresi string dari choroba, saya turun ke:
Untuk lebih mudah dilihat di browser Anda:
Untuk konteks, yang terbaik sebelum itu:
Perl 207
Menambahkan baris baru dan lekukan untuk kemudahan membaca di browser Anda:
Anda dapat mengganti "pop" dengan "<>" untuk mengambil hitungan dari STDIN alih-alih sebagai parameter baris perintah dan mencapai 206 byte. Pergi ke STDERR akan menjatuhkannya ke 204 byte.
Jika saya dapat mengaktifkan fitur 'say' tanpa penalti byte, maka saya dapat mencapai 202.
dipanggil sebagai:
sumber
say
tanpa penalti karena sama dengan menjalankan pada baris perintah dengan-E
alih - alih-e
.perl -E''
tidak dihitung terhadap total karakter Anda._|_
.Perl 201
(hapus baris baru kecuali yang pertama yang mendapatkan #)
say
+<>
= 198.sumber
Haskell, 215 byte
Yang ini membangun tumpukan cracker secara induktif, menarik bagian cracker dan melompati beberapa daftar siklik:
Aliran kontrol cukup mudah; sebagian besar tipu daya adalah menggunakan kembali sebanyak mungkin bagian cracker.
Tidak Disatukan:
sumber
Python, 299
Saya pikir saya pandai tetapi solusinya ternyata terlalu rumit dan lebih lama daripada pendekatan langsung apa pun, namun saya tidak tahan untuk tidak mempostingnya. Program ini secara eksplisit menghitung karakter mana yang harus diplot pada posisi berbeda dari string keluaran, tanpa mengulangi masing-masing cracker.
Dan baris terakhir diperluas untuk melihat apa yang terjadi:
sumber
C, 284
Untuk fungsi
f
dan#define
s, tidak termasuk spasi danmain
. Sesuai dengan komentar edc65, saya telah memasukkan tipe integer 128-bit (yang akan saya lakukan tetap) tetapi saya salah hitung lagi dan saya hanya bisa melakukan 29 cracker sebelum puncaknya hilang.Fungsi lengkap dan program uji di bawah ini. Akan berkomentar nanti.
Hanya ada empat karakter berbeda dalam output. Ini diterjemahkan dari angka biner 0-3 oleh
" _.|"
. Arrays[]
berisi integer untuk setiap kolom output, 2 bit per simbol, yang diinisialisasi untuk mengandung cracker paling kanan.for
Loop pertama menyalin cracker sebelumnya, menggeser ke kiri untuk memindahkannya, menghapus menggunakan sudut kanan bawah&
ke kiri dan OR dengan cracker sebelumnya, 7 langkah ke kiri.for
Loop kedua menerjemahkan representasi 2-bit dari setiap karakter ke dalam karakter aktual dan mencetak karakter. Ada banyak kode di sini hanya untuk menekan spasi yang tidak perlu dalam output. Saya kecewa karena skor saya naik bukannya turun dari revisi saya sebelumnya.Keluaran
Itu 29 kerupuk. Saya mengganti ruang dengan
-
untuk tampilan yang berbeda, dan untuk menunjukkan bahwa tidak ada spasi tambahan atau baris baru di output.sumber
JavaScript (ES6) HTML5 - 233
236byteMungkin bukan jawaban yang valid, tapi saya tidak bisa menahan posting, maaf :-P
Tes di Firefox dengan
F(1)
,F(2)
,F(3)
, dllContoh: http://jsfiddle.net/Lvmg9fe8/7/
sumber
F(1)
atau nomor lain, setelah memasukkan kode ini di konsol JS di Firefox ...