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'ordredo while (condition); #Explainything
alors{stuff} #Explainything
.Réponses:
Gelée ,
87 octetsEssayez-le en ligne!
Comment ça marche
la source
Python 2,
4843 octetsMerci à @xnor d'avoir joué 5 octets au golf!
Testez-le sur Ideone .
la source
map(max,*x)
parce quemax
prend un certain nombre d'arguments etNone
est petit.map
peut être utilisé comme ça ... Merci!`...`[2::5]
astuce?`...`
est équivalent àrepr(...)
, donc pour la liste des chaînes singleton['a', 'b', 'c']
, vous obtenez la chaîne"['a', 'b', 'c']"
. Enfin,[2::5]
coupe les deux premiers caractères ("['"
) et prend chaque cinquième caractère de la chaîne restante.JavaScript (ES6),
977560 octetsMerci à @Neil d' avoir aidé le golf sur 22 octets
L'entrée est un tableau de lignes.
a
est une entrée de tableaup
est l'élément précédentc
est l'élément actuelm
est une chaîne de correspondanceo
est décaléla source
m
indicateur regexp n'est pas nécessaire (en aviez-vous un$
à un moment donné), tout comme l'espace(p, c)
. Enfin, je pense quereplace
cela fonctionnera plus court que[...p].map().join
.length
et du script utilisateur, peut-être que vous n'avez pas compté la nouvelle ligne, mais uniquement parce que j'ai accidentellement inclus le point;
qui n'est pas requis (JavaScript a ASI).replace
ça aiderait tellement, c'est vraiment bien!Perl,
353432 octetsComprend +1 pour
-p
Donnez votre avis sur STDIN
eso.pl
Notez qu'il y a un espace après la finale
;
. Le code fonctionne comme indiqué, mais remplacez-le\0
par le caractère littéral pour obtenir le score revendiqué.la source
$a|=...
plutôt bien fait, il m'a fallu un certain temps pour comprendre ce que vous faisiez! Une question cependant:*_=a
semble être à peu près équivalente à$_=$a
, pourquoi est-ce?*_=a
est une affectation de glob très obscure qui alias les_
globaux et lesa
globaux. Ce n'est donc pas tellement une copie de$a
à$_
mais à partir de là (global)$a
et ce$_
sont en fait la même variable. Tout pour économiser 1 octet ...Python 2, 187 octets
Je vais jouer au golf plus demain, j'ai l'école;)
la source
1 for
peut être réduit à1for
. De plus, si la somme de la liste (à la ligne 5) ne peut pas être négative, vous pouvez simplement vérifier au<1
lieu de==0
. Bonne journée d'école! : D +1.Rubis, 63 octets
Fondamentalement, un port de la réponse de Dennis 'Jelly . Prend l'entrée comme un tableau de chaînes.
Voir sur eval.in: https://eval.in/640757
la source
CJam , 12 octets
Merci à Sp3000 pour avoir économisé 2 octets.
Un bloc sans nom qui prend une liste de chaînes (une pour chaque ligne) et la remplace par une seule chaîne.
Essayez-le en ligne!
Explication
la source
J, 30 octets
Prend une liste de chaînes en entrée. Utilise essentiellement la même approche que Dennis dans sa réponse Jelly.
Commenté et expliqué
Étapes intermédiaires:
Cas de test
la source
Javascript (ES6), 63 octets
Prend l'entrée comme un tableau de chaînes.
la source
Rétine , 32 octets
Le nombre d'octets suppose un codage ISO 8859-1.
Essayez-le en ligne!
la source
Pyke,
1510 octetsEssayez-le ici!
Réponse de Port of the Jelly
la source
C #
157122 octetsGolfé 35 octets grâce à @milk - même si je le jure, j'ai essayé ça plus tôt.
Prend l'entrée comme un tableau 2D de caractères.
157 octets:
la source
Trim()
fonctionner à la place deTrimEnd()
? Encore mieux, je pense que vous pouvez économiser beaucoup d'octets en utilisant s [0] comme var de sortie et en utilisantreturn new string(s[0],0,i)
oùi
est l'index du dernier caractère de code. Cette idée peut nécessiter deuxfor
boucles au lieu de laforeach
, j'y penserai davantage et j'essaierai d'écrire du code réel plus tard dans la journée.Trim()
sera également coupé dès le début, ce qui, je crois, ne serait pas valable. Je faisais également à l'origine le chargement dans s [0] et j'avais un int eni;
dehors de la boucle (pour le réutiliser dans le retour) qui, je crois, a finalement ajouté des octetsPyth, 11 octets
Un programme qui prend l'entrée d'une liste de chaînes sur STDIN et imprime une chaîne.
Essayez-le en ligne
Comment ça marche
la source
sed, 126 octets
Nécessite une nouvelle ligne à la fin de l'entrée.
Je suis sûr que je peux jouer au golf un peu plus, mais je suis juste heureux que cela fonctionne pour l'instant.
la source
Perl 6 , 39 octets
Traduction de la solution Python par Dennis .
Prend l'entrée comme une liste de chaînes et renvoie une chaîne.
( essayez-le en ligne )
la source
Gelée , 27 octets
Testez-le sur TryItOnline
Utilise la spécification la plus stricte - l'espace supplémentaire avant que le caractère de commentaire ne soit supprimé au prix d'un octet.
L'entrée est une liste de chaînes.
la source
Rubis, 77 octets
la source
TSQL,
216175 octetsGolfé:
Non golfé:
Violon
la source
Javascript,
5634 octets, non concurrentComme l'a souligné @ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳, je ne suis pas prêt pour les espaces supplémentaires
la source
Dyalog APL , 22 octets
L'inspiration .
(
⎕UCS
représentation des caractères de¯2↓
tous sauf les deux derniers⍳∘35↑
jusqu'à la position des 35 premiers ("#"), dans ce qui est en dehors de la parenthèse, prise de⊢
ce qui est en dehors de la parenthèse)
à savoir...⌈⌿
les maximums en colonnes∘
de⎕UCS
les valeurs UnicodeTryAPL en ligne!
la source