Başarılı kod golf başvuruları, doğası gereği her yerde çılgın sembollerle doludur. Gönderilmelerinin anlaşılmasını kolaylaştırmak için, birçok kod golfçü kodlarının bir açıklamasını eklemeyi seçer. Açıklamalarında, kod satırı dikey olarak patlatılmış bir şemaya dönüştürülür.
Örneğin, eğer bu benim kodumsa:
1_'[3:~2@+]`
Oluşturabileceğim olası diyagramlardan biri şöyle görünür:
1
_'
[ ]
[3: ]
[ ~ ]
[ 2@ ]
[ +]
`
Amaç
Bu zorlukla, bir kod satırı alan ve açıklayıcı metnin kolayca eklenebileceği bir şema oluşturan bir açıklama otomatik biçimlendirme aracı yazacaksınız.
Bunu daha yararlı bir zorluk haline getirmek için , kullanıcı bir format dizesi sağlayarak her bir satırın içeriğini belirleyebilecektir. Biçimlendirme dizesi, yalnızca harfleri içeren A-Za-z
, programla aynı uzunlukta olan ikinci bir satır olacaktır . Harfler açıklamada program karakterlerinin basılacağı sırayı gösterir.
İşte herhangi bir parantez benzeri biçimlendirmeden G / Ç örneği :
123423
AabcBC
1
2
3
2
3
4
Parantez
Programdaki birden fazla karakter aynı öncelik seviyesine sahipse, bu karakter kümesi tek bir kod bloğu (bir grup oluştururlarsa) veya bir küme parantezi (aralarında başka karakterler içeriyorsa) görevi görür. Genel kurallar basit:
Karakterler, diyagramdaki bir çizgide görünmüyor, diğer tüm öncelikli karakterler zaten çizgideki çizgilerin üzerinde göründü.
Eşit öncelikli karakterler her zaman aynı satırlara yazdırılır. Bir satırda belirli bir karakter görünürse, satırda eşit önceliğe sahip diğer tüm karakterler görünür.
Her satırda, içine alınmış tüm diğer karakterler en az bir kez görünene kadar eşit öncelikli bir karakter kümesi görünmeye devam eder. Bu, "braket benzeri" yapılara izin verir. Eğer
bceab
öncelikler, ob
karakterleri (onlar ikinci en yüksek önceliktir) ikinci satırında görünecek ve tüm kadar görünmeye devam edercea
karakterler ortaya çıkmıştır. Öncelik dizesi iseabcadeafga
,bcdefg
içindeki her şeyin içinde bulunduğu kabul edilir,a
belirene kadar 4 sn de görünmeye devam ederg
.
Daha fazla biçimlendirme gereksinimi
Tüm çıktı çizgileri, aynı boşlukta olmalı (giriş çizgilerinin uzunluğu), boşluklarla doldurulmalıdır. Giriş program satırında boşluklar bulunabilir, ancak bu alanlara da öncelikli bir mektup verilecektir. Çıkış / giriş üzerindeki son satırlar isteğe bağlıdır.
puanlama
Bu kod golf, en az bayt kazanıyor.
Örnekler
İşte daha karmaşık biçimlendirmeli bir kod parçasının yorumlanmış bir örneği.
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
Perl'deki bir örnek:
$_=<>;s/[^aeiou\W]/$&o$&/gi;print
aaaaaabbccccccccccbdddddbbbbeeeee
$_=<>;
s/ / /gi;
s/[^aeiou\W]/ /gi;
s/ /$&o$&/gi;
print
Martin Büttner'in izniyle CJam'da birkaç örnek:
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$}*}/
İşte sadece seninle uğraşmak için çılgın bir örnek:
1_'[3:~2@+]`
azTABACBDCAT
[ : ]
[3: 2 ]
[3:~2 +]
[ :~ @+]
' `
1
_
İşte parantez gibi üst üste geldiğinde ne olacağını daha açık bir örnek abab
. (Normalde, açıklamanızı biçimlendirmeyi seçtiğiniz yol bu değildir.)
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.
oNo
ile değiştirilebilirn
içinde TIO .