No início desta semana, aprendemos sobre como formatar idiomas esotéricos para comentar. Hoje, vamos fazer o inverso disso. Preciso que você escreva um programa ou função que analise algum código esotérico bem comentado e analise os comentários, retornando apenas o código. Usando alguns exemplos do desafio anterior, eis a aparência do código bem comentado:
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
Aqui está o que você precisa fazer para extrair o código. Primeiro, remova o caractere de comentário ( #
), o espaço antes dele e tudo depois do caractere de comentário.
a
bc
d
e
fgh
ij
k
l
mn
op
Em seguida, recolha cada linha para cima em uma única linha. Por exemplo, como b
está na segunda coluna da linha dois, quando a recolhermos, ela estará na segunda coluna da linha um . Similarmente,c
será colocado na terceira coluna da linha um e d
na quarta. Repita isso para cada personagem e você obtém o seguinte:
abcdefghijklmnop
Nota importante: parece que a solução trivial é apenas remover os comentários, remover todos os espaços e juntar todas as linhas. Esta não é uma abordagem válida! Como o código original pode ter espaços, eles serão removidos com essa abordagem. Por exemplo, esta é uma entrada perfeitamente válida:
hello #Line one
#Line two
world! #Line three
E a saída correspondente deve ser:
hello world!
O desafio:
Escreva um programa ou função que receba o código comentado como entrada e emita ou retorne o código com todos os comentários analisados. Você deve produzir o código sem espaços à direita, embora uma nova linha à direita seja permitida. O caractere de comentário sempre será #
e sempre haverá um espaço extra antes do início dos comentários. #
irá não aparecem na seção de comentários da entrada. Para manter o desafio mais simples, eis algumas entradas que você não precisa lidar com:
Você pode assumir que o código não terá dois caracteres na mesma coluna. Por exemplo, esta é uma entrada que viola esta regra:
a #A character in column one bc #Characters in columns one and two
Você também pode supor que todos os caracteres de comentário apareçam na mesma coluna. Por exemplo, esta entrada:
short #this is a short line long #This is a long line
viola essa regra. Isso também significa que
#
não estará na seção de código.E, por último, você não precisa lidar com seções de código com espaços à esquerda ou à direita. Por exemplo,
Hello, # World! #
Você também pode assumir que a entrada contém apenas caracteres ASCII imprimíveis.
Exemplos:
Input:
hello #Line one
#Line two
world! #Line three
Output:
hello world!
Input:
E #This comment intentionally left blank
ac #
h s #
ecti #
on is #
one c #
haracte #
r longer #
than the #
last! #
Output:
Each section is one character longer than the last!
Input:
4 #This number is 7
8 #
15 #That last comment is wrong.
16 #
23 #
42 #
Output:
4815162342
Input:
Hello #Comment 1
world #Comment 2
, #Comment 3
how #Comment 4
are #Comment 5
you? #Comment 6
Output:
Hello world, how are you?
Input:
Prepare #
for... #
extra spaces! #
Output:
Prepare for... extra spaces!
Você pode digitar qualquer formato razoável que desejar, por exemplo, uma lista de strings, uma única string com novas linhas, uma lista 2D de caracteres, etc. A resposta mais curta em bytes vence!
hello world!
que você mostrou)? Além disso, você declara: " #
não aparecerá na seção de comentários da entrada. ", Mas pode ocorrer no próprio trecho de código?
do {stuff} while (condition);
com a explicação em ordem do while (condition); #Explainything
então {stuff} #Explainything
.