Os envios bem-sucedidos de golfe por código são, por natureza, preenchidos com símbolos malucos em todo o lugar. Para facilitar sua compreensão, muitos golfistas de código optam por incluir uma explicação de seu código. Na explicação deles, a linha de código é transformada em um diagrama explodido verticalmente.
Por exemplo, se este fosse o meu código:
1_'[3:~2@+]`
Um dos muitos diagramas possíveis que eu poderia criar ficaria assim:
1
_'
[ ]
[3: ]
[ ~ ]
[ 2@ ]
[ +]
`
O objetivo
Neste desafio, você escreverá uma ferramenta de formatação automática de explicações que utiliza uma linha de código e cria um diagrama ao qual o texto explicativo pode ser facilmente adicionado.
Para tornar esse desafio mais útil , o usuário poderá especificar o conteúdo de cada linha, fornecendo uma string de formatação. A cadeia de formatação será uma segunda linha, contendo apenas letras A-Za-z
, que é do mesmo tamanho que o programa. As letras mostram a ordem em que os caracteres do programa devem ser impressos na explicação.
Aqui está um exemplo de E / S sem formatação de colchete :
123423
AabcBC
1
2
3
2
3
4
Suportes
Se mais de um caractere no programa tiver o mesmo nível de prioridade, esse conjunto de caracteres funcionará como um único bloco de código (se formarem um grupo) ou um conjunto de colchetes (se eles contiverem outros caracteres no meio). As regras gerais são simples:
Os caracteres não aparecem em uma linha do diagrama até que todos os outros caracteres de maior prioridade já apareçam nas linhas acima dele no diagrama.
Caracteres de igual prioridade são sempre impressos nas mesmas linhas. Se um determinado caractere aparecer em uma linha, todos os outros caracteres de igual prioridade aparecerão na linha.
Um conjunto de caracteres de igual prioridade continua a aparecer em cada linha até que todos os outros caracteres contidos nela apareçam pelo menos uma vez. Isso permite construções "entre parênteses". Se
bceab
forem as prioridades, osb
caracteres aparecerão na segunda linha (são a segunda maior prioridade) e continuarão a aparecer até que todos oscea
caracteres apareçam . Se a seqüência de prioridade forabcadeafga
, todosbcdefg
serão considerados contidos nela, e todos os 4a
s continuarão a aparecer até que apareçag
.
Mais requisitos de formatação
Todas as linhas de saída devem ter o mesmo comprimento (o comprimento das linhas de entrada), preenchidas com espaços conforme necessário. A linha do programa de entrada pode conter espaços, embora esses espaços também recebam uma letra prioritária. Novas linhas à direita na saída / entrada são opcionais.
Pontuação
Isso é código de golfe, o menor número de bytes vence.
Exemplos
Aqui está um exemplo comentado de um pedaço de código com formatação mais complexa.
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
Um exemplo em Perl:
$_=<>;s/[^aeiou\W]/$&o$&/gi;print
aaaaaabbccccccccccbdddddbbbbeeeee
$_=<>;
s/ / /gi;
s/[^aeiou\W]/ /gi;
s/ /$&o$&/gi;
print
Aqui estão alguns exemplos no CJam, cortesia 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$}*}/
Aqui está um exemplo maluco só para mexer com você:
1_'[3:~2@+]`
azTABACBDCAT
[ : ]
[3: 2 ]
[3:~2 +]
[ :~ @+]
' `
1
_
Aqui está um exemplo mais explícito do que acontece quando os colchetes se sobrepõem abab
. (Normalmente, não é dessa maneira que você escolheria formatar sua explicação.)
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
pode ser substituído porn
no TIO .