Muitas pessoas neste site usam idiomas esotéricos e, como são incomuns e difíceis de entender, frequentemente escrevem uma explicação em um determinado formato. Por exemplo, se o código foi
abcdefghijklmnop
E essa linguagem usa #
para comentários, eles escreveriam uma explicação como esta:
a #Explanation of what 'a' does
bc #Bc
d #d
e #Explanation of e
fgh #foobar
ij #hello world
k #etc.
l #so on
mn #and
op #so forth
Também faço isso com frequência, mas toda vez que faço isso, sinto que criar o layout do texto é realmente desagradável e demorado. Então, eu quero que você crie um "Esolang-Comment-Template-Generator" para mim. Por exemplo, se ignorarmos os comentários, o código anterior terá este modelo:
a #
bc #
d #
e #
fgh #
ij #
k #
l #
mn #
op #
O desafio:
Você deve escrever um programa ou função que use duas seqüências de caracteres como entrada e produz esse "Modelo de comentário de esolang". A primeira entrada será o código, mas com as barras ( |
) inseridas onde as novas linhas vão. A segunda entrada é o que usaremos para comentários. Portanto, nosso último exemplo teria isso como entrada:
"a|bc|d|e|fgh|ij|k|l|mn|op", "#"
Infelizmente, isso exclui as barras de fazer parte da entrada de código, mas tudo bem. Você pode assumir que a entrada do comentário será um único caractere. Por uma questão de simplicidade, o caractere de comentário não será um bar. A entrada de código conterá apenas ASCII imprimível e não conterá novas linhas.
Espero que você possa deduzir o que fazer nos casos de teste, mas tentarei esclarecer algumas coisas.
Você deve dividir o código inserido em "seções de código" em todas as barras. Em seguida, cada seção do código é emitida em sua própria linha e preenchida à esquerda com o comprimento de todo o código anterior (sem incluir as barras). Em seguida, cada linha é preenchida com o botão direito com espaços suficientes para que os dois últimos caracteres em cada linha sejam "Um espaço adicional" + "O caractere de comentário".
Uma nova linha à direita é permitida.
Aqui está outro exemplo. Para a entrada
"Hello|World", "/"
A primeira seção do código é "Olá" e a segunda é "Mundo". Portanto, deve dar a saída:
Hello /
World /
Aqui estão mais algumas amostras:
Input:
"a|b|c|d|e|f|g", ","
Output:
a ,
b ,
c ,
d ,
e ,
f ,
g ,
Input:
"abcdefg", ":"
Output:
abcdefg :
Input:
"4|8|15|16|23|42", "%"
Output:
4 %
8 %
15 %
16 %
23 %
42 %
Input:
"E|ac|h s|ecti|on is| one c|haracte|r longer| than the| last!", "!"
Output:
E !
ac !
h s !
ecti !
on is !
one c !
haracte !
r longer !
than the !
last! !
Input:
"This|Code|has||empty||sections", "@"
Output:
This @
Code @
has @
@
empty @
@
sections @
Regras:
Você pode levar essas entradas e saídas em qualquer formato razoável. Por exemplo, lendo / gravando um arquivo, STDIN / STOUT, argumentos de função / valor de retorno, etc. Como de costume, isso é código-golfe , portanto, tente tornar seu código o mais curto possível e você ganha se conseguir a solução mais curta. na sua língua! Também selecionarei a solução mais curta como o vencedor geral. As brechas padrão são proibidas.
|
personagem seria bom, para que possa explicar-se|
)?Respostas:
Pitão -
28272423 bytesPode ser capaz de jogar um pouco de golfe.Muito fora, aparentemente!Experimente online aqui .
fonte
Retina ,
3534 bytesA contagem de bytes assume a codificação ISO 8859-1.
As duas cadeias de entrada são separadas por um espaço (o que é inequívoco, pois sabemos que o delimitador de comentários é sempre um único caractere).
Experimente online!
fonte
Java 10,
189159 bytes-30 bytes convertendo Java 7 em Java 10 e otimizando os loops.
Experimente online.
Explicação:
fonte
Pyke,
312824 bytesExperimente aqui!
fonte
JavaScript (ES6), 92 bytes
fonte
GNU sed (85 + 1 para -r) 86
As entradas são cadeias separadas por um espaço.
Testes:
input.txt:
Saída:
fonte
:
é um recurso / bug do GNU sed e\S
acho que é uma extensão, então talvez o título deva serGNU sed
. Fora isso, ótimo código.Haskell,
139135 bytesSalva 4 bytes ao incluir uma definição.
Ungolfed:
fonte
Groovy,
120113111 bytesungolfed *
(Primeiro rascunho com 120 bytes)
ungolfed *
Testes
fonte
.padRight(s.replace('|','').size()+1)+c)
Python 2,
125 124132 bytes-1 byte graças a @TuukkaX (perdeu o espaço
i, v
)Todos os casos de teste em ideone
fonte
c
como caractere de comentário, não#
.Python 2,
10710510299 bytesTestado com todos os casos de teste acima
EDIT Golpeou 2 bytes alterando d = a.split ("|"); i = 0 para d, i = a.split ("|"), 0 Não tenho certeza de como eu perdi esse. Obrigado @Oliver Ni
Mais 3 bytes desaparecidos. Obrigado novamente.
A sugestão de @ Jonathan, na verdade, salva 3 bytes e o leva até a mágica 99. Obrigado.
fonte
" "*i
de 2 byteslen(e)
gostarfor e in d:z=len(e)....
de salvar um byte, pois é usado duas vezes05AB1E ,
29383129 bytesDefinitivamente pode ser jogado, mas pelo menos está funcionando agora ..
+9 bytes porque
¡
(dividido) remove itens vazios automaticamente, então eu tive que adicionar'|„ǝʒ:'ǝ¡'ʒм
..-2 bytes graças a @MagicOctopusUrn mudando
'|„ǝʒ:'ǝ¡'ʒм
para'|¶:.BεðÜ}
(a solução atual não funciona em itens com espaços à direita, mas presumi que isso seja permitido de acordo com os casos de teste).Experimente online.
Explicação:
fonte
ǝʒ
.'|¶:.B
poderia trabalhar tho.'|¶:.B
?.B
uma segunda vez depois de adicionar os espaços anteriores..B
já presente.'|¶:.BεðÜ}εD®>úsg®+©s}.BεðIJ,
? 29 bytes. Voltar à iteração 1 :)..B
divide em novas linhas, que é um recurso que muitas pessoas não conhecem. É a única maneira que conheço de manter os elementos vazios. Eu solicitaria isso como um recurso..¡
deve significar dividir, mas manter os elementos vazios ..PowerShell v2 +,
10399 bytesRecebe a entrada como duas strings,
-split
a primeira no pipe literal (já que split usa a sintaxe regex) e alimenta os elementos em um loop|%{...}
.A cada iteração, construímos uma string como sendo um número de espaços definidos por
$l
concatenados com o elemento atual. Para o primeiro loop,$l
inicializa para$null
, que é avaliado aqui como0
.Essa sequência é concatenada com outro número de espaços (definido por quanto tempo
$a
seria se-replace
cada canal fosse1
preenchido com nada, mais o preenchimento adicional entre código e comentários, menos o.length
elemento atual, menos$l
o número de espaços que preenchemos deixado nesta iteração), concatenado com o nosso caractere de comentário$b
. Isso fica na calha.Em seguida, atualizamos
$l
para a próxima iteração.As seqüências resultantes são todas deixadas no pipeline e a saída via implícita
Write-Output
acontece na execução do programa, com uma nova linha entre elas por padrão.Exemplos
fonte
Vim,
3938 pressionamentos de tecla-1 byte graças a DJMcMayhem
Espera como entrada um buffer (por exemplo, um arquivo) cujo primeiro caractere seja o delimitador de comentários, seguido pelo código, por exemplo
#foo|bar|baz
.Explicação
("
_
" denota um espaço literal.)fonte
mm
param`
e depois mudar`m
para<C-o>
Floróide - 94 bytes
Usa uma abordagem semelhante à solução Python do @ JonathanAllan .
Casos de teste
fonte
C #
176167154 bytesUnGolfed
Uma solução LINQ teria sido 146, mas precisava
using System.Linq;
trazê-la de volta para 164:Soluções antigas:
167 bytes:
176 bytes usando interpolação de string
fonte
PHP,
120117116110109 bytesou
fonte
MATL ,
3331 bytesExperimente online!
Explicação
A função embutida
Yd
(blkdiag
), que constrói uma matriz diagonal de bloco a partir de suas entradas, faz a maior parte do trabalho. Os valores de preenchimento na matriz são 0 e o caractere 0 é tratado como um espaço para fins de exibição. O código simplesmente se dividiria|
, construiria uma matriz a partir dos blocos resultantes, converteria em char e anexaria duas colunas com espaço e símbolo de comentário.No entanto, a possibilidade de seções vazias na cadeia de entrada
complicatorna o problema mais interessante: o bloco resultante ficaria vazio e, portanto, não apareceria na matriz resultante.Para resolver isso, apresentamos um caractere 0 antes de cada um
|
, para que nenhum bloco fique vazio; e, em seguida, na matriz de caracteres resultante, removemos colunas que são formadas apenas por caracteres 0. Uma seção de código não-vazia terá alguns caracteres ASCII imprimíveis e, portanto, as colunas que ela se estenderá sobreviverão. Uma seção vazia contribuirá com uma linha, mas não apresentará uma coluna extra.fonte
|
( jogo subexpression antes ou depois da|
) faz necessidade que, pelo menos no motor do Matlab / Octave regexpPitão, 30 bytes
ou
Ambos são programas completos que recebem entrada em STDIN da sequência de comentários e, em seguida, a sequência do programa, separada por nova linha.
Experimente a primeira versão online
Experimente a segunda versão online
Como eles trabalham
fonte
Dyalog APL 16.0 (não concorrente),
4337 bytesSolicita o caractere de comentário e, em seguida, o código.
Não concorrente porque a versão 16.0 é mais recente que esse desafio.
fonte
Perl, 63 bytes
Inclui +5 para
-Xpi
Execute com a entrada STDIN e o caractere de comentário após -i:
esolang.pl
:Solução simples e totalmente entediante
fonte
Turtlèd , 35 bytes (não-competitivo)
Toma uma entrada, o último caractere é o caractere de comentário. Não funciona com o caractere de comentário como espaço, mas presumo que isso não seja necessário.
Explicação:
fonte
Funky , 89 bytes
Experimente online!
fonte
Scala, 123 bytes
Código de teste + Saída:
fonte
Ruby,
9680 bytesVeja-o em eval.in: https://eval.in/639012
Eu realmente deveria apenas aprender Retina.
fonte
Geléia , 41 bytes
Parece que tem muitos incrementos e provavelmente muitos links ...
Teste em TryItOnline
Quão?
fonte
CJam, 32 bytes
Explicação
Experimente online
fonte
GolfScript, 85 bytes
Experimente online
Atualização 2017 - GolfScript - 71 bytes
Explicação
fonte
Gelatina , 10 bytes
Experimente online!
fonte