Centrer le texte!
Dans ce défi, vous allez centrer différentes lignes.
Exemples
Foo
barbaz
Foo
barbaz
Hello
World
Hello
World
Programming Puzzles
&
Code Golf
Programming Puzzles
&
Code Golf
Caractéristiques
Chaque ligne d’entrée aura toujours au moins un caractère non blanc, vous pouvez donc supposer que le seul caractère blanc est un espace ( ) et une nouvelle ligne. Chaque ligne d'entrée n'aura pas d'espaces de fin et / ou de début (à l'exception de la nouvelle ligne). Les espaces de fin dans la sortie ne sont pas autorisés.
Vous devriez vous centrer sur la plus longue ligne de l'entrée. Si la longueur de cette ligne est uniforme, votre programme / fonction devrait préférer se centrer vers la gauche. La longueur de ligne maximale est celle que votre langue peut gérer, mais votre programme doit fonctionner sur des lignes d'au moins 500 caractères.
Classement
Voici un extrait de pile permettant de générer un classement régulier et un aperçu des gagnants par langue.
Pour vous assurer que votre réponse apparaît, commencez votre réponse par un titre, en utilisant le modèle Markdown suivant:
# Language Name, N bytes
où N
est la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores en les effaçant. Par exemple:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Si vous souhaitez inclure plusieurs numéros dans votre en-tête (par exemple, parce que votre score est la somme de deux fichiers ou si vous souhaitez répertorier séparément les pénalités d'indicateur d'interprétation), assurez-vous que le score réel est le dernier numéro de l'en-tête:
# Perl, 43 + 2 (-p flag) = 45 bytes
Vous pouvez également faire du nom de la langue un lien qui apparaîtra ensuite dans l'extrait de classement:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
C'est du code-golf, donc le code le plus court en octets gagne!
la source
foo(space)(space)(space)bar
est une entrée parfaitement acceptableRéponses:
Pyth,
1917 octets2 octets grâce à Jakube
Manifestation
Je pense que c'est la première fois que la fonction de pad central
.[
est utile. La longueur de la plus longue ligne est trouvée en utilisant une transposition non tronquée (.T
) .Les espaces de fin sont supprimés en ajoutant un caractère non-espace au premier plan, en supprimant les espaces, puis en supprimant le caractère ajouté.
la source
vim,
433635 octetsTrop bien pour ne pas publier. Notez le retour à la ligne suivant; c'est important.
Merci à @Marth d' avoir sauvé un personnage!
format convivial:
Explication:
la source
sor!
pour inverser l'ordre de tri, vous pouvez utilisercol("$")
pour obtenir la longueur de la première ligne (maintenant la plus longue depuis l'ordre inversé) au lieu de l'utiliserG$
, en enregistrant un total général de 1 octet! edit : ou vous pouvez conserver l'ordre de tri et utiliser à laG:let &tw=col("$")
place.:h :sort
je viens de découvrir que vous pouvez passer une expression rationnelle pour ignorer le texte correspondant dans le tri, afin que vous puissiez utiliser:sor /./
pour trier sur la longueur (+4 octets), ce qui vous permet de supprimer leVGrx
(-4 octets) et le deuxième annulation ( -1 octets). Vous pouvez également utiliser des|
séparateurs au lieu de<cr>
chaîner les commandes, ce qui vous permet de passer à l’:
avant.let
(-1 octets) (notez que vous devez utiliser lasor!
solution alors, ceG
n’est pas une commande ex). Donc:sor! /./|let &tw=col("$")|u|%ce
(avec une fin<CR>
) devrait économiser 2 octets.Mathematica, 96 octets
Ne me demandez pas comment cela a fonctionné, je me suis contenté de le manipuler jusqu'à ce que le résultat soit correct.
la source
Funciton , non compétitif
Ce défi a mis en lumière le manque flagrant de fonction de «valeur maximale» (et de valeur minimale) pour les séquences paresseuses, alors ... je les ai ajoutées à la bibliothèque principale (elles s'appellent respectivement et ⊥). Par conséquent, je n'ai pas pris la peine de soumettre cela comme réponse au golf (il faudrait inclure la déclaration de fonction pour être valide), alors voici simplement le programme principal.
Exécuter
(function(){$('pre,code').css({lineHeight:5/4,fontFamily:'DejaVu Sans Mono'});})()
dans la console de votre navigateur pour obtenir un rendu plus agréable.Explication
Je pense que c'est peut-être la première réponse Funciton sur ce site qui utilise des expressions lambda.
ǁ
divisons la chaîne d’entrée au niveau des nouvelles lignes (ASCII 10). Cela retourne une séquence paresseuse.ɱ
(map), en lui donnant un lambda qui calcule la longueur de chaque chaîne, puis nous passons la dernière séquence⊤
pour obtenir la longueur de la plus longue ligne.ɱ
, en lui donnant un lambda qui calcule la longueur de chaque chaîne, la soustrait de la longueur de ligne maximale calculée précédemment, divise par 2 (en fait, shift-right 1) et génère autant d'espaces (ASCII 32). puis concatène la chaîne sur ces espaces. (Pour des raisons géométriques, j'ai déclaré une‡
fonction qui appelle‼
(concaténation de chaînes) les paramètres inversés.)ʝ
de rassembler toutes les chaînes, en utilisant des nouvelles lignes (ASCII 10) comme séparateur.la source
Retina ,
5452 octetsLes
\t
s peuvent être remplacés par des onglets réels, mais je les ai utilisés\t
ici, sinon SE convertira les onglets en espaces. Notez qu'il y a un espace de début sur la deuxième ligne.Essayez-le en ligne.
Explication
L’idée de base est de faire correspondre une ligne qui a au moins deux caractères plus courts que la plus longue ligne (ou, techniquement, deux caractères plus courts que n’importe quel caractère). autre ligne) et de l'entourer de deux espaces. Ceci est répété jusqu'à ce que nous ne puissions plus trouver une telle ligne, ce qui signifie que toutes les lignes sont comprises dans un caractère de la longueur maximale (le caractère devant rendre compte des asymétries de parité, et garantit que ces lignes sont décalées vers la gauche). centre).
En ce qui concerne la regex actuelle:
Correspond juste à une ligne tout en poussant une capture sur le groupe
1
pour chaque personnage.Est un regard derrière qui correspond de droite à gauche et déplace le curseur au début de la chaîne, de sorte que le lookahead à l'intérieur puisse vérifier la chaîne entière. Notez qu'en raison d'un manque d'ancre, le lookahead peut être appliqué de n'importe où, mais cela ne crée pas de correspondances supplémentaires. Nous savons que tout caractère de la chaîne
[^\t]
correspondra toujours , car il est garanti que l'entrée ne contient que des espaces et des sauts de ligne en ce qui concerne les espaces.Ce lookahead essaie de trouver une ligne qui a au moins deux caractères de plus que celle que nous comparons actuellement.
[^\t]*
se déplace dans la chaîne afin de pouvoir faire correspondre n'importe quelle ligne.^
assure que nous partons du début de la ligne...
correspond ensuite aux deux caractères supplémentaires requis pour la ligne la plus longue. Correspond maintenant à(?<-1>.)+
des caractères individuels de cette ligne lors de la sortie d'un groupe1
(remarque: il.
est impossible de faire correspondre un saut de ligne, il est donc limité à une ligne). Enfin,(?(1)^)
affirme que nous avons réussi à vider tout le groupe1
. Si la ligne est plus courte que nécessaire, cela n’est pas possible car il n’ya pas assez de caractères dans la ligne pour sortir du groupe 1 assez souvent pour la vider.la source
Jolf , 3 octets
Question non concurrente, mise à jour postdates.
Essayez-le ici! .
¯ \ _ (ツ) _ / ¯ Je pensais que ce serait une fonction utile.
la source
JavaScript (ES6),
9391 octets2 octets sauvés grâce à @ edc65 !
Explication
Tester
Afficher l'extrait de code
la source
.repeat
accepte et tronque les valeurs non entières, vous n'avez donc pas besoin|0
CJam,
262319 octetsMa première fois en utilisant CJam! Quatre octets économisés grâce à Martin Büttner. Essayez-le en ligne.
Explication
la source
qN/_z,f{1$,m2/S*\N}
LabVIEW, 3 ou 35 primitives LabVIEW
Trouve les lignes jusqu'à ce qu'il n'en reste plus aucune, puis calcule le nombre d'espaces à ajouter et met tout ensemble.
Sinon, vous pouvez utiliser l'alignement central intégré sur les indicateurs de chaîne, mais vous avez l'impression de tricher.
la source
Python 2,
8381 octetsMerci à @xnor pour la sauvegarde de 2 caractères
exemple d'entrée:
exemple de sortie:
Et se terminant à la deuxième place avec 84 octets en utilisant str.center () et str.rstrip (merci @JF).
la source
len
à une variable que vous utilisez deux fois - cela casse même à 5 caractères (commerange
). En outre, vous pouvez utilisermap
pour la liste comp.str.rstrip()
après avoir appelécenter
pour vous débarrasser de l'espace de fuite.len(max(a,key=len))
, voir ceci .TeaScript , 24 octets
Boucle à travers les lignes, ajoute
floor((max line length - line length) / 2)
espaces au début.Ungolfed
Essayez-le en ligne
la source
PowerShell, 58
67octetsjusqu'à 58 octets grâce aux commentaires de @ mazzy:
$a
, boucle sur chaque chaîne avec|%{...}
.string.padleft()
méthode sur chaque chaîne, via% -member
raccourci, qui prend en paramètre la longueur de ligne finale souhaitée.array_longest_line_length/2 + current_line_length/2
current_line_length/2
->$_.length/2
la source
Emacs Lisp, 203 octets
Ungolfed:
Centré:
la source
HTML, 40 octets
Afficher l'extrait de code
Snippet inclut
</xmp>
tag, car le visualiseur d'extraits de code souhaite que mes tags soient équilibrés.la source
MATL , 22 à
31octetsChaque ligne est entrée avec une ligne de fin (c’est-à-dire un enter frappe). Une ligne vide (deuxenter frappes de touche) marque la fin de la saisie.
Exemple
Explication
la source
Ruby,
766861 octetsÉchantillon échantillon:
la source
->t{(s=t.split$/).map{|l|l.center s.map(&:size).max}}
center
abord, mais si j'ai bien compris, cela enfreindrait la règle «Le suivi du blanc dans la sortie n'est pas autorisé». Merci pour la&:size
partie - j'ai aussi essayé cela aussi, mais j'ai certainement frappé quelque chose autour de la syntaxe.Haskell,
1118177 octetsSi vous entrez dans la fonction f, la sortie n’est pas imprimée.
Utilisation: chargez dans l'interpréteur
ghci center.hs
puis si vous voulez imprimer la sortie de f sur une chaîne donnéeputStr$f"Programming Puzzles\n&\nCode Golf"
Edit: Merci à nimi pour 34 octets, excellent travail! :RÉ
la source
map
:<$>
.replicate(...)' '
peut être remplacé par[1.. ...]>>" "
. Dans l' ensemble:unlines[([1..div(maximum(l<$>q)-l w)2]>>" ")++w|w<-q]
.l1 >> l2
fait (longueur l1) des copies de l2 et les concatène. Par exemple"abcd" >> [1,2]
->[1,2,1,2,1,2,1,2]
(<- 4 copies de 1,2 dans une seule liste). Dans notre cas, il[1..n]>>" "
s’agit de n copies d’un espace identique à ce que l’onreplicate
fait.R, 126 octets
code
non-golfé
Il existe probablement de meilleures façons de le faire tout en y travaillant.
la source
Gema, 160 octets
Écrit principalement pour ma curiosité de voir ce qui peut être fait dans une langue sans structure de tableau appropriée ni instruction de boucle appropriée.
Échantillon échantillon:
la source
Perl 6 , 61 octets
usage:
la source
for @l {
rasage de 2 octets, et de changerput " "
enput" "
un autre octet. Est-ce vrai pour Perl 6? (Je ne connais pas Perl 6.) De plus, votre sortie telle qu'affichée ici ne correspond pas à la sortie requise; est-ce une faute de frappe?Japt,
2825Essayez-le en ligne!
Comment ça marche
la source
PHP , 98 octets
Essayez-le en ligne!
Ungolfed:
Sortie:
la source
05AB1E , 2 octets
Construit dans ftw ¯ \ _ (ツ) _ / ¯
Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
(La préférence à droite serait plutôt avec une capitale
.C
: voir les différences .)la source
Japt , 1 octet
Essayez-le ou lancez tous les cas de test
la source