5 bahasa 11 karakter = 0,4545
Mengambil tantangan ini sebagai kesempatan untuk memeriksa beberapa bahasa baru (CJam, Burlesque, zsh, gs2). Pertama kali saya bekerja dengan bahasa-bahasa ini.
Metode di balik pembuatan output berbeda di hampir setiap bahasa. Hanya metode CJam dan gs2 yang identik. Keempat metode tersebut adalah, membuat rentang [1, 100] dan mengirisnya dengan modulo (CJam dan gs2), membuat kisaran [1, ..., 100] dan memfilter untuk elemen yang 1 mod 7 (Pyth), membuat kisaran [1, ..., 100], membaginya menjadi potongan len 7 dan menggunakan elemen pertama dari setiap potongan (Burlesque), dan membuat urutan langsung (zsh).
Saya mencoba merancang setiap program sedemikian rupa, sehingga terlihat golf untuk seseorang, yang tidak terbiasa dengan bahasa.
sunting 1: ditambahkan Burlesque, 2 bahasa sebelumnya dengan 10 karakter = 0,2
sunting 2: tambah gs2, 3 bahasa sebelumnya dengan 11 karakter = 0,2727
sunting 3: tambah zsh, 4 bahasa sebelumnya dengan 11 karakter = 0,3636
CJam
q~\1+,0-\%p
Uji secara online dengan input 100 7
.
q~ push the evaluated input (100 7)
\ swap (7 100)
1 push 1 (7 100 1)
+ add last to elements (7 101)
, create the range (7, [0, 1, ..., 100])
0 push 0 (7, [0, 1, ..., 100], 0)
- delete 0 from the range (7, [1, 2, ..., 100])
\ swap ([1, 2, ..., 100], 7)
% use every 7th entry ([1, 8, ..., 99])
p print pretty
Bahan tertawaan
jrojcoq-]m[
Selain zsh, ini adalah satu-satunya program golf. Burlesque cukup mengagumkan, ia memiliki berbagai fungsi yang sangat besar, seperti ro
. Sayangnya tidak ada yang seperti [::a]
operator pengiris Python .
Tidak ada penerjemah online, tetapi Anda bisa mendapatkan Burlesque di sini . Karena Burlesque tidak mendukung fungsi atau IO, Anda harus meletakkan nilai ke tumpukan terlebih dahulu100 7 jrojcoq-]m[
j Swap (7 100)
ro Range (7 {1 2 ... 100})
j Swap ({1 2 ... 100} 7)
co ChunksOf ({{1 2 .. 7} {8 ... 14} ... {99 100}})
q Create Block ({{1 2 .. 7} {8 ... 14} ... {99 100}} {})
-] head (first element) ({{1 2 .. 7} {8 ... 14} ... {99 100}} {-]})
m[ map the chunks to the head-block
GS2
read-nums dup head inc range tail swap reverse head mod unlines
Yap, ini hanya 11 karakter. Dalam gs2 setiap byte memiliki arti yang berbeda. Tetapi karena menulis dalam byte cukup sulit dan tidak menyenangkan, Anda juga dapat menulis dalam mnemonik, yang dapat Anda kompilasi dengan kode gs2 yang sebenarnya. Kode gs2, yang dieksekusi adalah
W@!'."B !4+
atau sebagai hex-dump:
57 40 21 27 2e 22 42 20 21 34 2b
Fakta menyenangkan: Saya tidak menulis dalam mnemonik, tetapi secara langsung angka-angka dari hex-dump.
Anda dapat mengujinya dengan mengunduh kompiler . Kompilasi file mnemonics dengan python gs2c.py < mnemonics.txt > compiled
atau cukup salin W@!'."B !4+
ke file yang bernama compiled
lalu jalankan dengan echo 100 7 | python gs2.py compiled
.
Mnemonik cukup bisa dijelaskan sendiri, tapi inilah yang terjadi di stack.
57 40 21 27 2e 22 42 20 21 34 2b
57 read-nums ([100 7])
40 dup ([100 7] [100 7])
21 head ([100 7] 100)
27 inc ([100 7] 101)
2e range ([100 7] [0 1 ... 100])
22 tail ([100 7] [1 2 ... 100])
42 swap ([1 2 ... 100] [100 7])
20 reverse ([1 2 ... 100] [7 100])
21 head ([1 2 ... 100] 7)
34 mod ([1 8 ... 99])
2b unlines ('1\n8\n...\n99')
everything on the stack gets printed
Btw, 8 byte mungkin, bahkan mungkin lebih sedikit.
sunting: Saya bercabang gs2, sedikit memanipulasi perintah dan membuat permintaan tarikan, yang sudah digabung. Jadi sekarang tugas dapat dilakukan dengan 6 byte :, read-nums extract-array swap range1 mod unlines
yang diterjemahkan menjadi 57 0e 42 2f 34 2b
, yang bahkan lebih baik daripada pyth optimal.
zsh
f() seq 1 $2 $1
Ini mendefinisikan fungsi f
, yang menciptakan urutan. Untuk menggunakannya di Windows, saya menginstal babun shell, di mana Anda cukup mengetik perintah ini. Cukup tulis f() seq 1 $2 $1
dan di baris berikutnya f 100 7
.
Pertama saya mencoba menulis ini di Bash, tetapi di sana Anda harus menulis di ()
sekitar blok kode, seperti f() ( seq 1 $2 $1 )
. Jadi saya beralih ke zsh.
Pyth
fq1%TeQUhhQ
Ini sangat menyakitkan, karena tentu saja saya melihat golf 7 byte yang jelas. Anda dapat mengujinya secara online dengan input 100, 7
.
Q = input()
UhhQ the range [0, 1, ..., Q[0]]
f filtered (only use those elements T, which satisfy the equation
q1%TeQ 1 == T % Q[1]
NumberOfLanguages / CodeSize
?