Étant donné une entrée de deux chaînes avec des séquences de soulignements représentant les mots correspondants, sortez les phrases avec les «blancs» remplis.
La meilleure façon de décrire ce défi est par l'exemple. Voici un exemple d'entrée:
programming _____________ and code golf
programming puzzles ______ code ____
Et voici la sortie correspondante:
programming ___puzzles___ and code golf
programming puzzles _and__ code golf
Aux fins de ce défi, un «mot» est défini comme une séquence d'une ou plusieurs lettres minuscules, et un «blanc» est défini comme un ou plusieurs traits de soulignement (l'entrée ne contiendra toujours que des lettres minuscules, des espaces et des traits de soulignement) . Les mots et les blancs dans les chaînes d'entrée sont séparés par des espaces simples, et la somme du nombre de mots et de blancs dans les phrases sera toujours égale.
L'objectif du défi est de remplir tous les blancs avec les mots corrects , qui sont les mots qui occupent le même index dans l'autre chaîne lorsqu'ils sont divisés par des espaces.
Le mot doit être centré dans le blanc, comme indiqué avec le mot «puzzles» dans l'exemple ci-dessus - un nombre égal de traits de soulignement reste de chaque côté.
Si le mot ne peut pas être exactement centré, le trait de soulignement supplémentaire peut aller à gauche ou à droite (ex. Le mot "et" dans l'exemple ci-dessus).
Il y aura toujours suffisamment de soulignements pour que le mot tienne, mais il peut y en avoir exactement autant que la longueur du mot (ex. Le mot "golf" dans l'exemple ci-dessus).
Il n'y aura jamais de blanc dans la même position dans les deux chaînes.
Les entrées / sorties peuvent être l'une des suivantes (les entrées / sorties ne doivent pas nécessairement être via la même méthode):
chaîne unique séparée par un caractère non alphabétique, un espace ou un trait de soulignement (par exemple, une nouvelle ligne ou une chaîne séparée par des virgules)
un tableau / liste / etc. de deux cordes
deux arguments de ligne de fonction / commande (entrée uniquement)
Puisqu'il s'agit de code-golf , le code le plus court en octets gagnera.
L'exemple ci-dessus peut être utilisé comme cas de test. Voici un cas de test plus grand (la deuxième chaîne en sortie peut varier légèrement en raison du comportement de centrage différent):
lorem _____ dolor _____ amet _______________ adipiscing elit mauris dapibus tincidunt _____________________________ accumsan fringilla proin vulputate viverra lorem fermentum dictum
lorem ipsum ______ sit _______ consectetur _______________ elit mauris dapibus tincidunt metus accumsan fringilla proin vulputate viverra lorem ____________________________ dictum
lorem ipsum dolor _sit_ amet __consectetur__ adipiscing elit mauris dapibus tincidunt ____________metus____________ accumsan fringilla proin vulputate viverra lorem fermentum dictum
lorem ipsum dolor_ sit _amet__ consectetur __adipiscing___ elit mauris dapibus tincidunt metus accumsan fringilla proin vulputate viverra lorem _________fermentum__________ dictum
Réponses:
Pyth, 30
Prend les entrées et sorties comme une liste de deux chaînes. Utilise une approche de base split – zip – double map – center – zip – join assez simple.
Essayez-le ici
Étendu:
J'expliquerai plus une fois que je suis vraiment convaincu que je ne peux plus jouer au golf, même si cela devrait être assez clair, compte tenu de l'omniprésence de l'approche split – zip – double carte – centre – zip – join et tout.
la source
Retina ,
1021009388 octetsLe nombre d'octets suppose un codage ISO 8859-1.
Les chaînes seront séparées par un saut de ligne. S'il reste un nombre impair de traits de soulignement, le caractère étranger sera après le mot.
Essayez-le en ligne!
Explication
Je suppose que c'est "l'approche duplicate-append-lookback-match-add-center", ou quelque chose de proche ...
Nous commençons par dupliquer l'entrée (séparée par un
!
et un saut de ligne). Le but de ceci est que nous pouvons ensuite traiter les deux lignes en récupérant les mots de la ligne suivante (au lieu d'avoir à traiter la deuxième ligne séparément).Cela ajoute le mot correct à chaque espace. Nous commençons par compter la position actuelle du mot avec le lookbehind
(?<=^(\w+ )*)
(la position est stockée comme la profondeur du groupe1
). Ensuite, l'anticipation a) garantit que nous sommes au début d'un écart en faisant correspondre_
, puis passe à la ligne suivante avec.*¶
, correspond au nombre correct de mots avec(?<-1>\w+ )*
pour arriver à la bonne position, puis correspond au mot trouvé là avec(\w+)
en dans groupe2
.Cette étape fait trois choses:
2
avec([a-z])+
puis en faisant correspondre autant de soulignements (qui ne sont jamais réécrits).(_*)\3
et en réécrivant$3$1$3
.!\D+
et en la remplaçant par rien.la source
Python 2, 109
La fonction prend deux chaînes comme arguments et imprime la sortie comme dans les exemples. Il utilise une approche ennuyeuse, avec
str.center(width, fillchar)
la plupart du travail.Essayez-le en ligne .
la source
z
, sauf si je manque quelque chose, vous pouvez simplement faire l'échange après l'impression et en lignez
.Ruby,
111109 caractèresEntrée: tableau de 2 chaînes; sortie: tableau de 2 chaînes.
Exemple d'exécution:
la source
JavaScript,
194185octetsPrend deux chaînes comme paramètres et génère deux chaînes comme tableau / liste
Afficher l'extrait de code
la source
Mathematica 223
Il doit y avoir un moyen plus court de procéder.
Exemple d'exécution
la source
Gema,
208203 caractèresTout simplement parce que Gema a la fonction parfaite pour cette tâche: .
@fill-center{background;value}
Entrée: 2 lignes séparées par une nouvelle ligne (pas de nouvelle ligne finale); sortie: 2 lignes séparées par des retours à la ligne (avec des espaces de fin - ne semblent pas être interdites).
Exemple d'exécution:
la source
C, 197 octets
Production
la source
ES6, 122 octets
Prend un tableau de deux chaînes en tant que paramètre unique et renvoie un autre tableau de deux chaînes.
la source