Un acrostiche est un style de poème / écriture où le caractère de début de chaque ligne, lu verticalement, produit également un mot ou un message. Par exemple,
Together
Everyone
Achieves
More
précise également le mot TEAM
lorsque la première colonne est lue verticalement.
Les acrostiches sont un sous-ensemble de s mésostiques , où le mot vertical peut être n'importe où dans les mots horizontaux. Par exemple, TEAM
celui ci-dessus pourrait également être écrit comme un mésostique comme suit
togeTher
everyonE
Achieves
More
ainsi que plusieurs autres variantes.
Le défi ici sera de produire un acrostiche ou mésostique à partir d'une liste donnée de mots d'entrée.
Contribution
- Une liste de mots dans n'importe quel format approprié .
- La liste ne contiendra que des mots en minuscules
[a-z]
. - La liste est garantie de former un acrostiche ou un mésostique (pas besoin de gérer de fausses entrées).
- L'un des mots dans l'entrée formera le mot vertical, tandis que les autres feront les mots horizontaux - une partie du défi ici est de trouver le mot vertical approprié, donc il ne peut pas être pris séparément.
Sortie
- Acrostiche ou mésostique de l'art ASCII formé à partir des mots saisis, écrits dans STDOUT ou retournés, dans n'importe quel format raisonnable.
- Le mot vertical correspondant doit être en majuscule (comme dans les exemples).
- Des espaces de tête pour aligner correctement le mot vertical sont nécessaires . Les espaces de fin et les nouvelles lignes de début / fin sont facultatifs. Les espaces de tête supplémentaires sont également très bien, tant que les mots s'alignent correctement.
- Si à la fois un acrostiche et un mésostique sont possibles, sortez uniquement l'acrostique.
- Si plusieurs acrostiches / mésostiques sont possibles, votre code peut en générer une partie ou la totalité.
Règles
- Un programme complet ou une fonction sont acceptables.
- Les failles standard sont interdites.
- Il s'agit de code-golf, donc toutes les règles de golf habituelles s'appliquent et le code le plus court (en octets) l'emporte.
Exemples
['together', 'team', 'everyone', 'achieves', 'more']
Together
Everyone
Achieves
More
['aaa', 'aaa', 'aaa', 'aaa']
Aaa
Aaa
Aaa
# One output, or multiple (of the same) output is allowed
['aaa', 'aaa', 'aab', 'baa']
Aaa
Aaa
Baa
# This is the only allowed output, since others would be mesostic, which are lower priority
['live', 'every', 'love', 'very', 'ohio']
Live
Ohio
Very
Every
# Note that 'live' couldn't be the vertical word since then it would be a mesostic, which is lower priority output
['cow', 'of', 'fox']
cOw
Fox
# A shorter mesostic test case
['late', 'ballroom', 'anvil', 'to', 'head']
anviL
bAllroom
To
hEad
Réponses:
Pyth,
52494746 octetsEssayez-le en ligne.
C'est probablement très jouable au golf. Il imprime un tas d'espaces de premier plan.
la source
Brachylog , 145 octets
Essayez-le en ligne!
(Cela prend une demi-minute, alors soyez patient.)
la source
JavaScript (ES6), 255
263 269 286Modifier 17 octets enregistrés en tant que nombre arbitraire d'espaces de tête est autorisé
Modifier2 certains brassages, 6 octets enregistrés
Modifier3 retourner une liste de chaînes au lieu d'une seule chaîne avec des retours à la ligne (commentaire OP à la réponse de feersum), 8 octets supplémentaires enregistrés
Pour chaque mot de la liste d'entrée, j'utilise un DFS récursif pour trouver tous les mésostiques / acrostiches possibles. Chacun est stocké sous forme de tableau avec la position du mot et de la lettre cible à l'intérieur du mot. Chaque résultat trouvé est enregistré dans le tableau de résultats global à la position 1 (s'il s'agit d'un acrostiche) ou 0 s'il s'agit d'un mésostique.
Après l'analyse complète de tous les mots, j'obtiens le résultat à la dernière position dans le tableau et je crée et renvoie sa représentation ascii art.
Moins golfé
Tester
la source
Perl6,
287277269 octetsla source
Mathematica 10.0, 139 octets
Une fonction sans nom renvoyant une liste de lignes:
Exemple d'utilisation:
Je cherche des suggestions sur de meilleures façons de faire la capitalisation.J'ai trouvé une fonction très agréableMapAt
pour mettre en majuscule la lettre dans la chaîne.la source
Haskell,
214206204202 octetsRenvoie une liste de chaînes remplies d'espace, par exemple
f ["late","ballroom","anvil","to","head"]
->[" baLlroom"," Anvil"," To"," hEad"]
ou plus adaptées à l'affichage:f
sélectionne les mots écrits horizontalement avec une liste de décalages.h
remplit chaque mot selon le décalage correspondant et insère la lettre majuscule. En détail:la source
Python, 249 octets
Probablement encore très golfable
Prend et renvoie une liste de liste de caractères.
- par exemple
" bAllroom"
est[' ',' ',' ','b','A','l','l','r','o','o','m']
Retourne uniquement le premier résultat et vérifie dans un ordre tel que toutes les acrostiches soient vérifiées en premier.
Voir tous les cas de test imprimés au format d'affichage sur ideone
Voici une forme fonctionnelle plus lisible qui fait de même (sauf qu'elle renvoie immédiatement le premier résultat plutôt que d'évaluer puis de renvoyer le premier résultat):
la source
Perl 6, 177 octets
Solution de force brute.
Comment ça marche
Chaque candidat ressemble à:
La transposition de la liste des listes de candidats est nécessaire pour s'assurer qu'un acrostiche, s'il existe, se retrouve avant tout mésostique.
la source