Alignement des lignes!
Étant donné un caractère et une chaîne multiligne, votre travail consiste à remplir chaque ligne de la chaîne afin qu'ils s'alignent entre le délimiteur donné.
Exemples
Contribution:
,
Programming, Puzzles
And, Code golf
Sortie:
Programming, Puzzles
And, Code golf
Contribution
L'entrée sera une chaîne multiligne et un caractère (sur lequel vous vous alignerez), vous pouvez les prendre dans n'importe quel ordre / format que vous souhaitez. Le caractère apparaîtra exactement une fois par ligne. Chaque ligne de l'entrée peut être de longueur différente.
L'entrée peut se faire via des arguments de fonction ou STDIN.
Sortie
La sortie doit être la même chaîne centrée. Vous avez droit à une nouvelle ligne de fin et aucun espace de fin.
La sortie doit être complétée avec le minimum d'espaces. Vous ne pouvez supprimer aucun espace de tête dans l'entrée (s'il existe).
La sortie peut provenir du retour de fonction ou de STDOUT.
la source
Réponses:
Pyth, 18 octets
la source
APL (37)
APL n'est tout simplement pas très bon pour le traitement des cordes (ou je ne suis pas bon pour le golf, bien sûr).
Cela prend le caractère comme argument de gauche et la chaîne multiligne comme argument de droite. On suppose que la chaîne multiligne se termine par un saut de ligne (par exemple
A\nB\nC\n
plutôt queA\nB\nC
.) Comme je peux utiliser "n'importe quel format [je] le souhaite", et c'est également le format conventionnel pour les fichiers texte, je pense que cela est raisonnable.Explication:
S←⌽⍵
: inverser la chaîne et la stocker dansS
.R←S⊂⍨S=⊃S
: DiviséS
sur son premier caractère et stocker le tableau de chaînes dansR
.⍺⍳¨⌽¨R
: inverser chaque chaîne dansR
, puis recherchez l'index de ⍺ (le caractère) dans chaque chaîne.(⌈/-+)
: soustrayez chacun des indices du plus grand indice, en donnant le nombre d'espaces nécessaires' '/⍨¨
: pour chacune de ces valeurs, générez autant d'espacesR,¨
: ajouter les espaces à chaque chaîne dansR
.∊
: joindre toutes les chaînes ensemble⌽
: inversez-le (pour récupérer la commande d'origine)Exemple:
la source
CJam,
232220 octetsMerci à Dennis d'avoir économisé 2 octets.
Cela lit les lignes des arguments de ligne de commande et le caractère de STDIN.
L'interpréteur en ligne ne prend pas en charge les arguments de ligne de commande, mais vous pouvez tester une version équivalente ici.
Explication
la source
Pip ,
222018 + 1 = 19 octetsPrend des chaînes comme arguments de ligne de commande et délimiteur de STDIN ( idée empruntée à la réponse CJam de Martin ). Utilise l'
-n
indicateur pour imprimer les valeurs de sortie sur des lignes distinctes.Et un exemple de course:
la source
JavaScript ES 2015, 113 octets
Pas aussi court que les langues de golf publiées jusqu'à présent. Prend l'entrée comme deux arguments de fonction, par exemple
f(',','Programming, Puzzles\nAnd, Code golf')
. L'extrait ci-dessous n'est pas golfé et comprend une méthode facile à tester.la source
Pyth,
2724 octetsMis à jour pour le dernier Pyth .
Démo en direct.
Version 27 octets
Démo en direct.
la source
jbm
au début de votre réponse, vous devriez immédiatement commencer à y penserV
.b
Julia, 117 octets
Ungolfed:
la source
Python 3, 85 (IDLE 3.2.2, Windows)
Assez simple. Cela trouve la position du caractère dans la chaîne deux fois: une fois pour trouver le max (enfin, une fois par ligne), et une fois pour trouver le décalage. J'ai essayé de les combiner mais c'était plus long.
Python 3 est utilisé pour le déballage d'entrée. MON IDLE semble prendre en entrée des chaînes multilignes.
la source
c
obtient le délimiteur ets
obtient une liste vide. Appels ultérieurs pourinput()
renvoyer les lignes restantes une par une.Gelée , 12 octets
Essayez-le en ligne!
Fait et joué au golf avec caird coinheringaahing à J elly H yper T raining (JHT) , notre salle de chat d'entraînement Jelly.
Comment ça marche
Le troisième argument de ligne de commande (première entrée) doit être la chaîne multiligne et le caractère doit être le quatrième argument de ligne de commande (deuxième entrée).
Je ne sais pas si la prise d'entrée en tant que liste de lignes est autorisée, donc cela prend une chaîne multiligne en entrée. Si cela était autorisé:
10 octets
Essayez-le en ligne!
la source
Matlab / Octave, 106 octets
Fonction qui utilise trois arguments distincts pour caractère, chaîne, chaîne; et donne un résultat en sortie standard:
Exemple dans Matlab:
Ou essayez-le en ligne avec l'interprète Octave.
la source
Julia, 80 octets
Ungolfed:
la source
JavaScript (ES6), 105
En utilisant des chaînes de modèle, les 2 nouvelles lignes sont significatives et comptées.
Testez l'exécution de l'extrait dans n'importe quel navigateur compatible EcmaScript 6 (c'est-à-dire FireFox. Chrome ne prend pas en charge les paramètres par défaut)
la source
Python 2, 93 octets
Appelé ainsi:
la source
C # 4.0,
329320307 octetsVersion non golfée:
Il accepte un maximum de 9999 lignes ...
la source
Dyalog APL ,
222016 octets-4 grâce à ngn.
APL n'est en fait pas si mauvais au niveau du traitement des chaînes, s'il est autorisé à travailler avec des tableaux. Dans ce défi, nous pouvons choisir le format le plus approprié, qui pour APL signifie un vecteur de vecteurs de texte comme argument gauche, et le délimiteur comme argument scalaire droit. Cela gère même plusieurs délimiteurs par ligne et aligne le premier de chaque ligne.
⊣,¨⍨
ajouter à chaque ligne' '⍴¨⍨
autant d'espaces que⌈.⍳
l'index le plus à droite du caractère parmi les lignes-
moins⍳¨
l'index du caractère dans chaque ligneEssayez APL en ligne! (
↑
ajouté pour imprimer la sortie verticalement)Prime? Fonctionne pour n'importe quel nombre de chaînes et délimiteurs (aligne par l'extrême gauche).
la source
⊣,¨⍨' '⍴¨⍨⌈.⍳-⍳¨
C #, 191
En tant que fonction. En gros un portage de ma réponse JS.
la source
Rubis, 74 octets
et l'appelle comme
la source
R, 68 octets
Fonction sans nom qui accepte les
3
entrées;c
qui est le caractère à aligner,x
est la première chaîne ety
la deuxième chaîne.Dans R, la fonction
regexpr
renvoie la position d'un motif donné dans une chaîne. La solution fonctionne en appliquantregexpr
sur les deux chaînes et en répétant les espaces blancs correspondant à la différence, puis en imprimant simplement les deux entrées séparées par une nouvelle ligne.la source
Python 2,
6766 octetsAppelé avec:
la source
Moonscript, 138 octets
Cela renvoie une fonction qui prend 2 arguments. Le premier est la chaîne, le second est le caractère sur lequel s'aligner. Ces arguments sont l'argument implicite @ et n.
Tout d'abord, j'ajoute une nouvelle ligne à la chaîne, pour faciliter le traitement.
Maintenant, je génère une liste des positions de chaque caractère d'alignement, en utilisant
gmatch
. Ensuite, je remplace la nouvelle ligne avant chaque ligne par le nombre correct d'espaces, puis je coupe la nouvelle ligne que j'ai ajoutée au début.la source
Lua, 169 octets
Pas aussi court que les autres réponses mais c'est ma première: D
la source
Rétine , 71 octets
Essayez-le en ligne! Remarque: Cela laisse le caractère d'alignement dans la sortie; il peut être supprimé au coût de 4 octets. Si seulement deux chaînes doivent être alignées, alors pour 52 octets:
Explication:
Cela correspond au caractère d'alignement.
Cela correspond à la première ligne et permet également de suivre le nombre de caractères avant le caractère d'alignement. (.NET conserve une pile de correspondance pour chaque variable, dans ce cas
$3
,.)Cela correspond à la deuxième ligne, en essayant de prendre en compte autant de caractères que nous avons trouvés sur la première ligne.
?<-3>
fait que la correspondance éclate la pile pour chaque caractère, jusqu'à ce qu'elle soit vide, à quel point la correspondance échoue,(.)*
puis correspond aux caractères restants avant le caractère d'alignement. À ce stade, nous avons les variables suivantes:$1
contient le caractère d'alignement$2
contient la première ligne$3
contient une pile dont la longueur est le premier préfixe de ligne moins le deuxième préfixe de ligne$4
contient la deuxième ligne$5
contient une pile dont la longueur est le deuxième préfixe de ligne moins le premier préfixe de ligne$#5$*
puis préfixe le nombre nécessaire d'espaces pour aligner la première ligne sur la seconde, et vice versa pour$#3$*
.Une logique similaire s'applique à la réponse principale, sauf qu'ici, nous devons trouver deux lignes qui ne s'alignent pas pour que nous puissions les aligner (c'est là
?(5)
qu'intervient le), puis répéter l'alignement sur toutes les lignes jusqu'à ce qu'elles soient toutes également alignées .la source
Lisp commun, 101 octets
Le premier paramètre est le caractère, le second est une liste de chaînes à aligner.
Essayez-le en ligne!
la source