Votre travail consiste à prendre une entrée de chaîne et un nombre et à aligner la chaîne à droite, en faisant de la largeur du texte le nombre. Quand une ligne est trop longue, cassez-la et mettez le reste sur la ligne suivante, en répétant jusqu'à ce que ce ne soit pas nécessaire. Si une ligne est plus courte que la largeur, remplissez-la avec des espaces. Plusieurs sauts de ligne peuvent se produire et doivent être traités comme tout autre caractère unique.
Par exemple, la chaîne
Programming
Puzzles
&
Code
Golf
et le nombre 5
produirait:
Progr
ammin
g
Puzzl
es
&
Code
Golf
Alors que la même chaîne et le même nombre 10
produiraient:
Programmin
g
Puzzles
&
Code
Golf
La chaîne
a
b
et le chiffre 5 produirait:
a
<-- note the 5 spaces
b
Le code le plus court gagne!
Programming Puzzles\n&\nCode Golf
?Réponses:
Pyth, 14 octets
Manifestation
Utilise l'opérateur pad de Pyth.
la source
Python 2, 84
Prend en entrée une chaîne avec des sauts de ligne et un nombre, et imprime le résultat. Pour chaque ligne de l'entrée, prend et imprime les
n
caractères à la fois, en utilisant la fonction intégréerjust
pour remplir la gauche avec des espaces avant l'impression.J'ai corrigé le cas de ligne vide avec le hack
w=w or' '
. Il y a probablement une meilleure méthode mais je ne vais pas y penser beaucoup.la source
CJam, 21 octets
Merci à @ Sp3000 pour avoir joué 1 octet et ouvert la voie à 3 autres.
Essayez-le en ligne dans l' interpréteur CJam .
Comment ça marche
la source
Pyth, 16
Essayez-le en ligne ici
Explication
la source
Perl, 39 octets
36 octets + 3 octets pour
-ni
. La largeur d'habillage est passée comme argument à-i
.Gère correctement les lignes vides en les remplissant d'espaces:
Comment ça marche
Cette solution utilise l'opérateur de substitution pour parcourir l'entrée, économisant ainsi un octet sur la
for
boucle équivalente . Le vrai truc, cependant, est dans l'expression régulière sur le LHS de la substitution:Avec le modificateur global, cela correspondra aux
$^I
caractères à la fois; lorsqu'il reste moins de$^I
caractères dans la chaîne, tout correspondra jusqu'à la fin. L'alternance avec^$
est nécessaire pour gérer les lignes vierges. Par exemple:Le RHS de la substitution utilise simplement
printf
pour remplir à gauche le morceau correspondant avec des espaces.la source
$^I
!Javascript (ES6), 107
Je souhaite que JS ait une fonction pad intégrée. Tant pis.
Explication:
la source
Julia, 126 octets
Non golfé:
la source
Bash,
62,61+ fonctionnalité, 59Plus court s'il
N
peut être défini par l'appelant, au lieu d'avoir à le lire comme première ligne d'entrée.Cela ne parvient pas à gérer les lignes vides dans l'entrée. Sinon, cela ne soumet pas les données d'entrée à la séparation des mots, à l'expansion du nom de chemin ou ne les traite pas comme plus que des données brutes.
read -n$N
enregistre un personnage, mais laisseread
Munge\
.Le
[[ $r ]]&&
est nécessaire carread -n4
ne peut pas regarder en avant pour voir que le prochain caractère est une nouvelle ligne. Il définitr
donc une chaîne de 4 caractères et la lecture suivante produit une chaîne vide de zéro caractère. Filtrer ces fausses nouvelles sans filtrer les vraies nouvelles lignes nécessiterait un état de suivi: que la ligne précédente ait ou non une longueur maximale. Il faudrait plus de code ou une approche totalement différente.[[ $r ]]
est plus court que[ -n "$r" ]
ce qui est nécessaire pour éviter les erreurs si la ligne commence par-z foo
, ou est*
ou quelque chose, si vous l'avez utilisé[ $r ]
.La justification se produit avec la chaîne de format standard printf "% 4s".
Testez avec
la source
-r
le nombre d'octets. 2.f()(while ... done)
est un peu plus court.[[ $r ]]&&
, si N = 4, une ligne d'entrée de longueur 4 produira une ligne de sortie vierge là où il n'y en avait pas auparavant. Parce queread
renvoie une chaîne de 4 caractères, puis voit une nouvelle ligne lors du prochain appel et revient immédiatement. Merci aussi pour l'()
astuce. Je ne savais pas que vous pouviez définir les fns de cette façon.while
c'est déjà composé, vous n'avez même pas besoin des parenthèses:f()while ... done
Haskell, 108 octets
Exemple d'utilisation:
Comment ça marche
la source
GNU awk + bash, 70
L'utilisation de bash pour insérer le compte dans le programme awk est problématique. plus petit que le lire avec un
NR==1{N=$0}
bloc.Lisez une ligne à la fois. Divisez-vous en 4 caractères au maximum, en utilisant FPAT. (correspond aux champs, plutôt qu'aux séparateurs. Extension GNU.) printf chaque champ séparément. (ORS par défaut = \ n).
La
/^$/
règle est là pour imprimer des lignes vides, qui ont NF = 0 et donc ne s'impriment pas du tout dans l'autre bloc. Contrairement à ma solution pure-bash, cela fonctionne en fait dans le cas général.Semi-indépendant, mais mon idée jusqu'à présent pour Perl est de 112 caractères pour juste le code Perl:
Cela mange l'une des nouvelles lignes et est beaucoup trop long.
$/=\1
lit un octet à la fois. Nous ajoutons à $ l. Une approche ligne par ligne avec une approche de largeur fixe serait probablement plus courte.la source
Utilitaires Bash + GNU, 41
La chaîne est entrée via STDIN, la largeur est entrée par la ligne de commande arg:
la source
Python 2, 151 octets
Il s'agit d'une adaptation de la réponse de @ xnor ci-dessus, car la sienne ne gère pas correctement les nouvelles lignes.
La
for
boucle a été modifiée de:à:
Exemple
la source
C #, 143 octets
Linq vous permet de faire des expressions assez noueuses.
GroupBy
est utile ici, mais c'est dommage qu'ils n'aient pas pu créer de surcharge de fonction en prenant l'index.Attribuer le lambda à un
Func<string, int, string>
pour l'exécuterMoins golfé:
la source
Groovy, 63 octets
Renvoie la chaîne correctement allouée. Je ne savais pas qu'il y avait jusqu'à présent une fonction padLeft (et padRight, padCenter).
la source
Javascript
174136la source
Ceylan, 107
la source
Matlab, 99 octets
Merci à @beaker pour avoir supprimé 6 octets!
Utilisation et fonction anonyme:
Définissez la fonction et utilisez-la
ans
pour l'appeler:la source
Burlesque, 28 octets
Identique à la version ci-dessous, mais traite la ligne 1 comme le nombre et les autres lignes comme la chaîne.
Utilisation comme dans:
Ancienne version (16 octets):
Exemple:
la source