Beberapa orang menghitung domba untuk tidur. Lainnya menghitung kambing.
Tulis program atau fungsi yang menghasilkan bilangan bulat N positif dan mengeluarkan N-1 kambing terjaga diikuti oleh satu kambing tidur, seolah-olah seseorang menghitung N kambing dan pada yang terakhir mereka tertidur.
Kambing terjaga terlihat seperti ini:
\
___/o>
-(___)"
'' ''
Kambing tidur terlihat seperti ini:
\
___/->
,(___)"
`` ``
Mereka dirantai bersama dengan satu ruang antara jenggot dan ekor kambing yang berdekatan:
\ \ \
___/o> ___/o> ___/->
-(___)" -(___)" ,(___)"
'' '' '' '' `` ``
Outputnya diizinkan untuk memiliki spasi tambahan dan satu baris tambahan baru.
Kode terpendek dalam byte menang.
Contohnya
N = 1:
\
___/->
,(___)"
`` ``
N = 2:
\ \
___/o> ___/->
-(___)" ,(___)"
'' '' `` ``
N = 3:
\ \ \
___/o> ___/o> ___/->
-(___)" -(___)" ,(___)"
'' '' '' '' `` ``
N = 4:
\ \ \ \
___/o> ___/o> ___/o> ___/->
-(___)" -(___)" -(___)" ,(___)"
'' '' '' '' '' '' `` ``
N yang lebih besar seharusnya bekerja dengan baik.
code-golf
string
ascii-art
kolmogorov-complexity
Hobi Calvin
sumber
sumber
Jawaban:
MATL ,
5653 byteCobalah online!
Penjelasan
Bangunlah kambing
Kambing yang terjaga dapat dimasukkan ke dalam tali
dan membongkar seperti yang akan dijelaskan segera. Namun, simbol tanda kutip tunggal perlu diduplikasi untuk menghindarinya, sehingga string literal harus didefinisikan sebagai (perhatikan simbol tanda kutip tunggal terlampir dan duplikasi yang asli):
Untuk menyimpan byte, kita mendefinisikan string menggunakan karakter satu titik kode di atas itu, sehingga menghindari duplikasi. String literal menjadi
Di akhir kode kita akan mengurangi 1 dan mengonversi menjadi char. (Kita bisa melakukannya sekarang, tepat setelah string literal; tetapi membiarkannya sampai akhir akan menyimpan duplikasi kutipan tunggal, seperti yang akan kita lihat).
Untuk menjelaskan bagaimana string diurai, kami akan bekerja dengan karakter asli (yang diproduksi di akhir kode dengan subtak 1), sehingga penjelasannya lebih mudah diikuti. Kami pertama-tama membentuk kembali string
menjadi array char 2D 8-baris, dalam urutan kolom-utama (turun, lalu lintas). Ini secara otomatis mengisi kolom terakhir dengan char 0 (di akhir kode, mengurangi 1 akan mengubahnya menjadi angka −1, yang dikonversi menjadi char memberi lagi char 0). Karakter 0 ditampilkan sebagai spasi. Jadi secara efektif kita dipenuhi ruang. Hasil pembentukan kembali adalah
Kami sekarang membalik secara vertikal:
dan kemudian transpos dan balik vertikal lagi untuk menghasilkan kambing yang terjaga:
Dua operasi flip diperlukan karena string yang dikemas asli "terbalik". Ini adalah untuk mengeksploitasi fakta bahwa array char 2D aktual yang mewakili kambing memiliki 6 spasi awal di baris pertama, yang secara otomatis diisi dengan padding ketika string dibentuk kembali menjadi array 2D 8-baris. Tetapi padding dilakukan di akhir (bukan awal) dari kolom terakhir (bukan baris), maka membalik dan transpos.
Kambing tidur
Seekor kambing tidur yang dihasilkan dari kambing terjaga dengan transliterasi karakter
o
,'
,-
menjadi-
,`
,,
masing-masing. Sebenarnya, karena transformasi satu-kode-point-atas, kita transliterasi karakterp
,(
,'
menjadi.
,a
,-
, yang lagi-lagi menyelamatkan kita dari keharusan untuk menduplikasi simbol single-quote. Inilah sebabnya mengapa operasi kurangi-satu dibiarkan pada akhir program.Struktur kode
N
kali, bekerja dengan poin kode meningkat sebesar 1.Kode yang dikomentari
sumber
Python 3.6, 102 byte
Yaay, f-string !
sumber
Javascript, 122 byte
Menjawab
Catatan sisi
Dalam kode berikut (91 byte) kambing disejajarkan secara vertikal. Itu tidak sesuai dengan format output tetapi saya pikir itu bisa menarik untuk dicatat bahwa perataan horizontal yang diperlukan dalam format output membutuhkan lebih banyak byte:
sumber
Batch, 234 byte
Mengambil input dari stdin. Batch memiliki masalah dengan
"
dan>
karena berbagai alasan, jadi saya harus menggunakan placeholder dan kemudian mengubahnya pada akhirnya.sumber
set/pn
._.^
lolos karakter.Pyke,
5654 byteCoba di sini!
4 byte terlalu banyak karena Pyke tidak mengizinkan kuotasi ganda dalam string :(
sumber
JavaScript (ES6),
110109 byteHarus mendukung ketiga jenis karakter kutipan itu menjengkelkan, tetapi untungnya komentar @ pinkfloydx33 memberi saya kilasan inspirasi bahwa saya bisa menambahkan backquotes pada akhirnya sehingga menghemat 1 byte.
sumber
'+"'' ''"
(anggap kutipan tunggal adalah kutu kembali karena saya tidak tahu bagaimana cara mendapatkan backtick ke dalam blok kode dalam komentar)f=
dalam hitungan byte saya, hanya ada untuk kelengkapannya.GolfScript , 91 byte
Memasukkan:
3
Keluaran:
Penjelasan
Cobalah online!
sumber
Jelly ,
6256 byteUji di TryItOnline
Bagaimana?
sumber
PHP, 200 Bytes
sumber
C ++, 180 byte
sumber
#include <string>
dan salah satuusing namespace std;
atauusing std::string;
dalam jumlah byte Anda jika fungsi Anda tidak dapat dikompilasi tanpa mereka.Pip , 60 + 1 = 61 byte
Satu byte ditambahkan untuk
n
bendera.Bangun seekor kambing yang terjaga sebagai daftar garis dan menariknya ke dalam
y
. Tali-gandakan untuk mendapatkana-1
kambing yang terjaga. Menggantikan-o'
dengan,-`
diy
dan merangkai sampai akhir. Cetakan, dipisahkan baris baru.Cobalah online!
(Saya pikir ini adalah pertama kalinya saya menggunakan sintaks-string Pip
\"...\"
, yang memungkinkan untuk tanda kutip ganda literal dalam string.)sumber
CJam , 58 byte
Cobalah online!
Penjelasan
sumber
Python 2.7,
101113 byteEdit: Menambahkan definisi fungsi
de-golfified:
Catatan Python2.7 adalah satu byte lebih pendek dari Python3 karena itu tidak perlu parentesis saat mencetak.
sumber
n
, dan Anda melewatkan perubahan ekor untuk kambing tidur (juga apakah Anda melihat jawaban Py 3.6?).print "...
, dan menempatkan semuanya pada satu baris, menggunakan 1;
untuk memisahkan dua pernyataan. Ekor masih tidak dalam kode golf yang ditunjukkan, tetapi sepertinya Anda sudah menghitungnya, semua itu akan menghasilkan 112 byte .05AB1E , 66 byte
Cobalah online!
Penjelasan
sumber
Bash + GNU Coreutils,
165155 byteJalankan dengan:
Pada dasarnya program cetakan N kali dari kambing yang sama (terbalik), dan pengganti yang pertama
-
, untuk,
, pertamao
untuk-
dan yang pertama'' ''
untuk tanda kutip mundur. Kemudian membalikkan garis.sumber
PHP,
133131 byteSaya menemukan dua byte untuk golf dari salah satu versi tanpa keriting.
sumber
PowerShell v2 +, 96 byte
(ab) menggunakan
Write-Output
pemformatan default untuk menyertakan baris baru antar elemen. Memanfaatkan penggabungan string dan multiplikasi untuk membangun kambing baris demi baris. Satu-satunya trik nyata adalah baris pertama$n--
untuk menampilkan jumlah telinga yang benar dan kemudian pasca-pengurangan$n
sehingga benar untuk sisa baris.sumber
Ruby, 102 byte
sumber
Python 3. 170 byte
hmm, tampaknya membangun string tanpa melakukan manipulasi daftar menghasilkan kode yang lebih pendek
sumber
IBM / Lotus Notes Formula,
187174188 byte(tidak bersaing)EDIT Menemukan ruang yang seharusnya tidak ada di sana dan menghapus @Implode yang tidak dibutuhkan
188 karena saya telah melewatkan fakta bahwa ekor kambing yang tidur berbeda :-(
Tidak Disatukan:
Pemakaian:
Buat formulir Notes dengan dua bidang bernama a dan g.
a = dapat diedit, angka, g = dihitung, teks.
Rekatkan rumus di atas ke dalam g dan beri nilai default 0.
Atur font bentuk ke Terminal.
Buat dokumen baru dengan formulir, masukkan nomor dalam dan tekan F9 untuk memperbarui kambing.
Sampel:
Tidak bersaing karena formatnya kacau ketika jumlah kambing mencapai lebar halaman.Mengingat layar jauh lebar itu
harusakan bekerja untuk sejumlah kambingmeskipun. Ini terlihat seperti ketika halaman tidak cukup lebar.sumber
Emacs Lisp, 241 byte
"Sedikit tidak berbulu"
Di mana
s
ada satu kambing tidur,a
menambahkan kambing yang terjaga dang(n)
fungsi menghitung.sumber
Java 8,
236222218173 bytePenjelasan:
Cobalah online.
sumber
Kanvas , 58 byte
Cobalah online!
Jawaban yang sangat membosankan, sungguh ... membangun kambing yang terjaga, mengulanginya secara horizontal
n-1
, membangun dan menambahkan kambing yang tidur, mencetak hasilnya.sumber