Les soumissions réussies de golf de code sont, par nature, remplies de symboles fous partout. Pour rendre leur soumission plus facile à comprendre, de nombreux golfeurs de code choisissent d'inclure une explication de leur code. Dans leur explication, la ligne de code est transformée en un diagramme éclaté verticalement.
Par exemple, si c'était mon code:
1_'[3:~2@+]`
L'un des nombreux diagrammes possibles que je pourrais créer ressemblerait à ceci:
1
_'
[ ]
[3: ]
[ ~ ]
[ 2@ ]
[ +]
`
Le but
Dans ce défi, vous allez écrire un outil de mise en forme automatique d'explication qui prend une ligne de code et crée un diagramme auquel du texte explicatif peut être facilement ajouté.
Afin d'en faire un défi plus utile , l'utilisateur pourra spécifier le contenu de chaque ligne, en fournissant une chaîne de formatage. La chaîne de formatage sera une deuxième ligne, contenant uniquement des lettres A-Za-z
, de la même longueur que le programme. Les lettres indiquent l'ordre dans lequel les caractères du programme doivent être imprimés dans l'explication.
Voici un exemple d'E / S sans formatage de type crochet :
123423
AabcBC
1
2
3
2
3
4
Supports
Si plusieurs caractères dans le programme ont le même niveau de priorité, alors cet ensemble de caractères agit comme un seul bloc de code (s'ils forment un groupe) ou un ensemble de crochets (s'ils contiennent d'autres caractères entre les deux). Les règles générales sont simples:
Les caractères n'apparaissent sur une ligne du diagramme que lorsque tous les autres caractères de priorité supérieure sont déjà apparus sur les lignes au-dessus du diagramme.
Les caractères de priorité égale sont toujours imprimés sur les mêmes lignes. Si un certain caractère apparaît sur une ligne, tous les autres caractères de priorité égale apparaissent sur la ligne.
Un ensemble de caractères de priorité égale continue d'apparaître sur chaque ligne jusqu'à ce que tous les autres caractères qu'il contient soient apparus au moins une fois. Cela permet des constructions de type "support". Si ce
bceab
sont les priorités, lesb
caractères apparaîtront sur la deuxième ligne (ils sont la deuxième priorité) et continueront à apparaître jusqu'à ce que tous lescea
caractères soient apparus. Si la chaîne prioritaire estabcadeafga
, alors tousbcdefg
sont considérés comme contenus dans celle-ci, un all 4a
s continuera à apparaître jusqu'à ce que leg
soit apparu.
Plus d'exigences de formatage
Toutes les lignes de sortie doivent avoir la même longueur (la longueur des lignes d'entrée), avec des espaces si nécessaire. La ligne de programme d'entrée peut contenir des espaces, bien que ces espaces reçoivent également une lettre de priorité. Les retours à la ligne en fin de sortie / entrée sont facultatifs.
Notation
C'est le golf de code, le moins d'octets gagne.
Exemples
Voici un exemple commenté d'un morceau de code avec une mise en forme plus complexe.
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
Un exemple en Perl:
$_=<>;s/[^aeiou\W]/$&o$&/gi;print
aaaaaabbccccccccccbdddddbbbbeeeee
$_=<>;
s/ / /gi;
s/[^aeiou\W]/ /gi;
s/ /$&o$&/gi;
print
Voici quelques exemples dans CJam, gracieuseté de 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$}*}/
Voici un exemple fou juste pour jouer avec vous:
1_'[3:~2@+]`
azTABACBDCAT
[ : ]
[3: 2 ]
[3:~2 +]
[ :~ @+]
' `
1
_
Voici un exemple plus explicite de ce qui se passe lorsque les crochets se chevauchent comme abab
. (Normalement, ce n'est pas la façon dont vous choisissez de formater votre explication.)
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
peut être remplacé parn
dans TIO .