Pengajuan golf kode yang sukses, pada dasarnya, dipenuhi dengan simbol-simbol gila di semua tempat. Untuk membuat pengajuan mereka lebih mudah dimengerti, banyak pegolf kode memilih untuk memasukkan penjelasan kode mereka. Dalam penjelasan mereka, garis kode diubah menjadi diagram yang meledak secara vertikal.
Misalnya, jika ini adalah kode saya:
1_'[3:~2@+]`
Salah satu dari banyak diagram yang mungkin saya buat akan terlihat seperti ini:
1
_'
[ ]
[3: ]
[ ~ ]
[ 2@ ]
[ +]
`
Hasil
Dalam tantangan ini, Anda akan menulis alat pemformatan otomatis penjelasan yang mengambil baris kode dan membuat diagram yang dapat dengan mudah ditambahkan teks penjelasan.
Untuk menjadikan ini tantangan yang lebih bermanfaat , pengguna akan dapat menentukan konten setiap baris, dengan memberikan string pemformatan. String pemformatan akan menjadi baris kedua, hanya berisi huruf A-Za-z
, yang panjangnya sama dengan program. Huruf-huruf menunjukkan urutan di mana karakter program harus dicetak dalam penjelasan.
Berikut ini adalah contoh I / O tanpa pemformatan seperti braket :
123423
AabcBC
1
2
3
2
3
4
Kurung
Jika lebih dari satu karakter dalam program memiliki tingkat prioritas yang sama, maka set karakter tersebut bertindak sebagai satu blok kode (jika mereka membentuk grup) atau seperangkat tanda kurung (jika mereka mengandung karakter lain di antaranya). Aturan umum sederhana:
Karakter tidak muncul dalam garis diagram sampai semua karakter lain yang memiliki prioritas lebih besar telah muncul pada garis di atasnya dalam diagram.
Karakter dengan prioritas yang sama selalu dicetak pada baris yang sama. Jika karakter tertentu muncul di baris, semua karakter lain dengan prioritas yang sama muncul di baris.
Serangkaian karakter dengan prioritas yang sama terus muncul di setiap baris sampai semua karakter lain yang terlampir dengannya muncul setidaknya satu kali. Ini memungkinkan konstruksi "seperti braket". Jika
bceab
prioritas, makab
karakter akan muncul di baris kedua (mereka adalah prioritas tertinggi kedua) dan akan terus muncul sampai semuacea
karakter muncul. Jika string prioritas adalahabcadeafga
, maka semuabcdefg
dianggap terkandung di dalamnya, semua 4a
s akan terus muncul sampaig
muncul.
Persyaratan pemformatan lainnya
Semua garis output harus memiliki panjang yang sama (panjang jalur input), diisi dengan spasi sesuai kebutuhan. Baris program input dapat berisi spasi, meskipun spasi tersebut juga akan diberikan surat prioritas. Mengejar baris baru pada output / input adalah opsional.
Mencetak gol
Ini adalah kode golf, byte paling sedikit menang.
Contohnya
Berikut adalah contoh kode yang dikomentari dengan pemformatan yang lebih kompleks.
1_'[3:~2@+]`
abbcddeffgch
1 #highest priority is denoted by the lowercase letter a
_' #priority b
[ ] #all characters with priority c
[3: ] #priority d, but priority c still printed because it encloses more
[ ~ ] #priority e
[ 2@ ] #priority f
[ +] #priority g, last line of c because all enclosed characters have appeared
` #priority h
Contoh dalam Perl:
$_=<>;s/[^aeiou\W]/$&o$&/gi;print
aaaaaabbccccccccccbdddddbbbbeeeee
$_=<>;
s/ / /gi;
s/[^aeiou\W]/ /gi;
s/ /$&o$&/gi;
print
Berikut adalah beberapa contoh dalam CJam, milik Martin Büttner:
l~2*{_2%{3*)}{2/}?_p_(}g;
aabbcdddefffeeggeehhiiccj
l~
2*
{ }g
{_2% }g
{ { }{ }? }g
{ {3*)}{ }? }g
{ { }{2/}? }g
{ _p }g
{ _(}g
;
q{_eu'[,66>"EIOU"-#)g{'o1$}*}/
abcccddddddeeeeeeefgghiijjhhbb
q
{ }/
{_eu }/
{ '[,66> }/
{ "EIOU"- }/
{ # }/
{ )g }/
{ { }*}/
{ {'o }*}/
{ { 1$}*}/
Berikut adalah contoh gila hanya untuk mengacaukan Anda:
1_'[3:~2@+]`
azTABACBDCAT
[ : ]
[3: 2 ]
[3:~2 +]
[ :~ @+]
' `
1
_
Berikut adalah contoh yang lebih eksplisit tentang apa yang terjadi ketika tanda kurung bertumpuk abab
. (Biasanya, ini bukan cara Anda memilih untuk memformat penjelasan Anda.)
aabbccddaaeebb
aabbccddaaeebb
aa aa
aabb aa bb
aabbcc aa bb
aabb ddaa bb
bb eebb #"aa" no longer appears because all of "bbccdd" have already appeared.
sumber
oNo
dapat diganti dengann
di TIO .CJam, 48 byte
Penjelasan
sumber
IDL 8.4,
316318304 byteVersi baru, masih terlalu panjang, tetapi lebih pendek! Dan, dalam semangat sejati IDL, sepenuhnya vektor, yang berarti (karena tidak ada untuk loop) bahwa saya sekarang dapat melakukannya sebagai satu baris, dan menjalankannya sendiri, setelah saya mendapatkan versi saya sepenuhnya ditingkatkan menjadi 8,4. Itu akan diedit nanti.
Versi satu baris:
Dengan jeda baris (jumlah byte yang sama, subtitle \ n vs &), dan berkomentar:
Berikut ini rincian algoritmik untuk saluran 9:
... dan 10:
Baris 9 dan 10 melakukan pekerjaan nyata, sisanya mengatur variabel yang Anda butuhkan untuk akhir. Saya pikir ini tentang golf seperti yang akan didapat, saya tidak dapat menemukan tempat lain untuk melakukannya dengan lebih baik.
Versi lama (semua yang ada di bawah ini sudah usang):
Ini tidak cukup pendek untuk menang, karena ini adalah bahasa golf yang mengerikan, tetapi tidak ada yang pernah menjawab di IDL jadi saya hanya akan melakukannya.
Saya tidak yakin apakah ada cara saya bisa mengurangi lebih banyak ... Saya bisa memanggil strmid pada a dan b pada saat yang sama, tetapi kemudian saya menghabiskan lebih banyak byte pengindeksan d dan hasilnya sama. Tapi aku akan terus mengusahakannya! (Dan besok saya akan mengedit penjelasan algoritmanya.)
sumber