Plus tôt cette semaine, nous avons appris comment formater des langues ésotériques pour commenter. Aujourd'hui, nous allons faire l'inverse de cela. J'ai besoin que vous écriviez un programme ou une fonction qui analyse un code ésotérique bien commenté et analyse les commentaires, en ne renvoyant que le code. En utilisant quelques exemples du défi précédent, voici à quoi ressemble un code bien commenté:
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
Voici ce que vous devez faire pour extraire le code. Tout d'abord, supprimez le caractère de commentaire ( #
), l'espace avant celui-ci et tout ce qui se trouve après le caractère de commentaire.
a
bc
d
e
fgh
ij
k
l
mn
op
Ensuite, réduisez chaque ligne vers le haut en une seule ligne. Par exemple, comme il se b
trouve dans la deuxième colonne de la ligne deux, une fois que nous l'avons réduit, il se trouvera dans la deuxième colonne de la ligne un . De même, c
sera placé dans la troisième colonne de la première ligne, et d
sera placé sur la quatrième. Répétez cela pour chaque personnage et vous obtenez ceci:
abcdefghijklmnop
Remarque importante: il semble que la solution triviale consiste simplement à supprimer les commentaires, à supprimer tous les espaces et à joindre chaque ligne. Ce n'est pas une approche valable! Étant donné que le code d'origine peut contenir des espaces, ceux-ci seront supprimés avec cette approche. Par exemple, ceci est une entrée parfaitement valide:
hello #Line one
#Line two
world! #Line three
Et la sortie correspondante devrait être:
hello world!
Le défi:
Écrivez un programme ou une fonction qui prend le code commenté en entrée et génère ou renvoie le code avec tous les commentaires analysés. Vous devez sortir le code sans aucun espace de fin, bien qu'une nouvelle ligne de fin soit autorisée. Le caractère de commentaire sera toujours #
, et il y aura toujours un espace supplémentaire avant le début des commentaires. #
ne pas apparaître dans la section des commentaires de l'entrée. Afin de simplifier le défi, voici quelques entrées que vous n'avez pas à gérer:
Vous pouvez supposer que le code n'aura pas deux caractères dans la même colonne. Par exemple, il s'agit d'une entrée qui viole cette règle:
a #A character in column one bc #Characters in columns one and two
Vous pouvez également supposer que tous les caractères de commentaire apparaissent dans la même colonne. Par exemple, cette entrée:
short #this is a short line long #This is a long line
viole cette règle. Cela signifie également que
#
ne sera pas dans la section de code.Et enfin, vous n'avez pas à gérer les sections de code avec des espaces de début ou de fin. Par exemple,
Hello, # World! #
Vous pouvez également supposer que l'entrée ne contient que des caractères ASCII imprimables.
Exemples:
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!
Vous pouvez prendre des entrées dans le format raisonnable que vous aimez, par exemple, une liste de chaînes, une seule chaîne avec des retours à la ligne, une liste de caractères 2D, etc. La réponse la plus courte en octets gagne!
hello world!
vous avez montré)? En outre, vous déclarez: " #
n'apparaîtra pas dans la section commentaire de l'entrée. ", Mais peut-il se produire dans l'extrait de code lui-même?
do {stuff} while (condition);
avec l'explication dans l'ordre do while (condition); #Explainything
alors {stuff} #Explainything
.