(Remarque: il s'agit de ma première question de golf par code, mais pour autant que je sache, personne d'autre n'a fait exactement cela, donc je devrais être bon.)
Votre tâche consiste à créer un programme ou une fonction qui accepte une chaîne s
et un entier n
, et renvoie ou génère ce texte encapsulé sur plusieurs lignes. Chaque mot doit être entièrement sur une ligne; c'est-à-dire aucun mot divisé au milieu. Chaque ligne ne peut pas dépasser plus de n
caractères et vous devez insérer autant de mots que possible sur chaque ligne.
Exemple:
s = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eget erat lectus. Morbi mi mi, fringilla sed suscipit ullamcorper, tristique at mauris. Morbi non commodo nibh. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed at iaculis mauris. Praesent a sem augue. Nulla lectus sapien, auctor nec pharetra eu, tincidunt ac diam. Sed ligula arcu, aliquam quis velit aliquam, dictum varius erat."
n = 50
output:
Lorem ipsum dolor sit amet, consectetur adipiscing
elit. Sed eget erat lectus. Morbi mi mi, fringilla
sed suscipit ullamcorper, tristique at mauris.
Morbi non commodo nibh. Pellentesque habitant
morbi tristique senectus et netus et malesuada
fames ac turpis egestas. Sed at iaculis mauris.
Praesent a sem augue. Nulla lectus sapien, auctor
nec pharetra eu, tincidunt ac diam. Sed ligula
arcu, aliquam quis velit aliquam, dictum varius
erat.
Votre sortie peut être un tableau de chaînes ou une seule chaîne avec des sauts de ligne. En outre, vous pouvez supposer qu'aucun mot ne sera plus long que n
, alors ne vous inquiétez pas de traiter des cas étranges.
Les règles d'E / S standard s'appliquent et les failles standard sont interdites. Les espaces de fin sont autorisés.
Puisqu'il s'agit de code-golf , la solution de shortes en octets l'emporte.
Voici un exemple de programme en Python qui fonctionnerait.
la source
n
est la longueur de ligne maximale, désolé que ce ne soit pas clair. Je vais clarifier. De plus, les règles ont maintenant été mises à jour de sorte qu'une simple division ne fonctionne pas.Réponses:
Python 2 , 26 octets
Essayez-le en ligne!
Meh ... les intégrés sont ennuyeux ... à la place, ayez une belle solution de 87 octets ici:
Essayez-le en ligne!
Génère des espaces de fin.
la source
PHP , 8 octets
Certes pas la solution la plus originale, mais PHP a une fonction native qui correspond parfaitement à vos besoins!
wordwrap
:Utilisez comme ça:
Ou essayez-le en ligne!
la source
JavaScript (ES6),
75 7372 octetsPrend l'entrée comme
(string)(n)
.Essayez-le en ligne!
Variables
La sortie formatée est stockée danso (en vert ci-dessous).
La ligneu mise à jour est définie comme la concaténation de:
Nous devons insérer un saut de ligne à chaque fois que len caractère -ème de u est défini (0 indexées, en rouge ci - dessous).
Exemple
Ajout de "LOREM":00L01O02R03E04M0506070809dix111213141516
Ajout "IPSUM":00L01O02R03E04M05∙06je07P08S09UdixM111213141516
Ajout de "DOLOR":00L01O02R03E04M05∙06je07P08S09UdixM11∙12ré13O14L15O16R
la source
r+w+' '
- être ?Perl 6 ,
4629 octetsEssayez-le en ligne!
Solution basée sur Regex qui prend les entrées au curry, comme
f(n)(s)
et renvoie une liste de lignes. Chaque ligne sauf la dernière a un espace de finExplication:
la source
Vim, 15 octets / touches
Une question de mise en forme du texte? Je connais juste l'outil pour le travail! Et il a même mon nom dans les deux premières touches: D
<C-r>
signifie ctrl-r.Cela pourrait être un peu plus court en V , mais je préfère répondre en vanilla vim pour des réponses qui montrent vraiment à quel point vim peut être concis pour le bon défi. Et la différence est si petite de toute façon.
Cela pourrait également être le cas pour 15 octets également:
Essayez-le en ligne!
la source
DJ:
Ce programme a été réalisé par DJ, notre chat préféré avec un diamant autour du cou. [...]R ,
3627 octetsR a ceci comme intégré (
strwrap
), nous retournons un vecteur de lignes divisées.Essayez-le en ligne!
la source
Haskell , 70 octets
la source
Python 2 , 74 octets
Essayez-le en ligne!
la source
Java (JDK) ,
4644 octetsFondamentalement, une solution regex pure en Java, presque certainement la plus courte que j'ai écrite.
Bravo à Kevin pour avoir aidé à réduire encore plus les octets dans l'expression régulière!
Essayez-le en ligne!
En utilisant un lamdba au curry, il crée une expression régulière pour correspondre avec avidité aux
n
caractères suivis d'un espace ou d'une fin de chaîne. Il remplace ensuite ces caractères par eux-mêmes suivis d'une nouvelle ligne.la source
[ $]
fait juste à un espace ou$
si je me souviens bien, plutôt qu'à la fin de la chaîne. Il semble que cela fonctionne, il semble donc qu'il puisse simplement être joué dans un seul espace pour encore moins d'octets.$0
place de$1
.replaceAll
tellement verbeuse!Mathematica, 16 octets
Fonction intégrée. Prend une chaîne et un entier en entrée et renvoie une chaîne en sortie.
la source
Powershell,
4083 octetsCas de test avec
n=80
ajout.Script de test:
Sortie:
la source
if
/else
avec le faux ternairereturn
dans laelse
partie et une déclaration dans lathen
partie.C (gcc) , 68 octets
Essayez-le en ligne!
Grâce à plafondcat , économisez 2 octets en déplaçant globalement
char*l
sur paramètre.la source
Japt , 20 octets
Essayez-le en ligne!
Merci à Bubbler et Shaggy pour leur aide
Explication:
la source
[X,Y].join(...)
.Retina 0.8.2 , 37 octets
Essayez-le en ligne! Prend
s
etn
sur des lignes séparées. Explication:Convertissez
n
en unaire.Faites correspondre les espaces non blancs, puis regardez en avant
n
et comptez comme$#1
. Revenez ensuite en arrière et utilisez un groupe d'équilibrage pour faire correspondre lesn
caractères suivis d'espaces.Sortez les correspondances sous forme de liste de lignes.
la source
.{1,50}
et$0¶
, mais où50
est reçu en entrée à la place?Fusain , 19 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Prend l'entrée de
n
ets
sur des lignes distinctes. Explication:Entrée
n
.Déplacez le curseur vers la gauche d'un carré pour équilibrer le mouvement de droite à partir de la première itération de la boucle.
Divisez la chaîne sur les espaces et faites une boucle sur les mots.
Calculez si le mot suivant atteindra le bord droit.
Si ce n'est pas le cas, déplacez-vous d'un carré vers la droite.
S'il démarre alors une nouvelle ligne.
Sortez le mot.
la source
Rouge ,
125, 117, 114112 octetsEssayez-le en ligne!
la source
05AB1E , 18 octets
Essayez-le en ligne.
Explication:
la source
Java 8, 135 octets
Essayez-le en ligne.
Explication:
la source
JavaScript, 40 octets
Essayez-le en ligne!
la source
APL (Dyalog Unicode) , 14 octets SBCS
Fonction Infix; l'argument de gauche est
n
, l'argument de droite estn
.Essayez-le en ligne!
⎕CY
c op y dans la bibliothèque dfns⋄
puiswrap
[c] utiliser l'enveloppe [n] fonction[c] code de cette fonction
[n] notes pour cette fonction
Version golfée de
wrap
, 59 octets SBCSEssayez-le en ligne!
{
…}
Dfn;⍺
est l'argument gauche (largeur),⍵
est l'argument droit (chaîne)≢⍵
décompte (nombre de caractères) de la chaîne⍺≥
…:
Si la largeur est supérieure ou égale à celle-ci, alors:⍵
retourner la chaîne⋄
autrement:' '=⍵
Masque booléen où les blancs sont égaux à la chaîneb←
stocker dansb
(pour b lanks)(
… En)↑
tirer le nombre d'éléments suivant:⍺+1
un de plus que la largeur⍸
i ndices où vraig←
stocker dansg
(pour g aps)⍺≥
Masque booléen dont la largeur est supérieure ou égale à celleg/⍨
filtrer les indices d'écart par ce⍺,
ajouter cela à la largeur⊃⌽
choisissez le dernier élément de cela (lit. choisissez le premier de l'inverse)t←
stockert
(pour t ake)b⊃⍨
utilisez-le pour choisir un élément du masque des bords bt+
ajouter cela àt
⍵↓⍨
supprimer autant de caractères de la chaîne⍺∇
recurse sur cela avec le même argument gauche gauche⎕TC,
Ajout qui a la liste des t erminal c ontrol caractères (8: HT, 10: NL, 13: CR)2↓
enlevez les deux premiers caractères de cela (en laissant juste un 13: CR)(
…),
Joignez cela à ce qui suit:t↑⍵
les premierst
caractères de la chaînela source
Merci à @Erik the Outgolfer, une version golfée:
Python 3 , 94 octets
Essayez-le en ligne!
# Python 3 , 130 octetsEssayez-le en ligne!
Version pas si golfée ...la source
JavaScript + HTML + CSS,
11764 octets-53 octets avec l'aimable autorisation de @Neil
la source
(n,s)=>document.body.innerHTML+=`<p style=width:${n}ch><tt>${s}</tt></p>`
74 octets. Si vous êtes prêt à déterrer les anciennes versions de Firefox, vous pouvez enregistrer 8 octets supplémentaires avec(n,s)=>document.body.innerHTML+=`<pre wrap width=${n}>${s}</pre>`
.ch
unités. Firefox 65 se calcule50ch
comme500px
; Chromium 70 calcule50ch
comme400px
elit. Sed eget erat lectus. Morbi mi mi, fringilla sed
(2e ligne) compte plus de 50 caractères. J'utilise le dernier Chrome.<p>
intérieur du<tt>
.Gelée , 12 octets
Essayez-le en ligne!
Malheureusement, cela est trop lent pour fonctionner pour le cas de test fourni en moins d'une minute sur TIO.
la source
C # (.NET Core) , 162 octets
Cette fonction utilise une expression régulière qui correspond à l'espace blanc le plus proche qui est proche du nième ou multiple du nième caractère et fractionne la chaîne en fonction de celui-ci.
Essayez-le en ligne!
Le lien TIO est un programme complet, et la fonction a un mot-clé statique afin que la fonction puisse être appelée à partir de main.
Test Regex
la source
C # (Visual C # Interactive Compiler) , 78 octets
Essayez-le en ligne!
Nous remercions @LukeStevens d'avoir proposé la version Java ... Apparemment .NET vous fait importer l'
RegularExpressions
espace de noms afin de faire un remplacement :(Voici ma version originale qui se divise sur le caractère espace et utilise LINQ pour les réunir à nouveau:
C # (Visual C # Interactive Compiler) , 91 octets
Essayez-le en ligne!
la source
Fléchette , 112 octets
Essayez-le en ligne!
la source
APL (NARS), 48 caractères, 96 octets
tester:
la source
C, 63 octets
La fonction de cet exercice b (a, n) romprait la ligne "a" comme dit l'exercice, de la même manière que sa longueur ne changerait pas (si nous voyons le résultat comme une chaîne) car changer certains espaces dans \ n ou une nouvelle ligne dans endroit. La chaîne d'entrée "a" ne devrait pas avoir de caractère \ n également pour la fonction b () (elle pourrait avoir \ n dans la chaîne d'entrée pour bs ())
La fonction b (a, n) ne serait correcte que parce que la restriction de cet exercice, qui impose que chaque mot d'une chaîne "a" a une longueur <n si ce n'est pas vrai, cette fonction peut aller
à une boucle infinie ... (très mal dans ma façon de voir donc je copie aussi la fonction plus bien car dans ce cas retournerait -1 et non irait à une boucle infinie; c'est bs (a, n) ci-dessous) je n'exclus pas les deux fonctions sont buggées .. .
résultat de b () passé sur une fonction qui ajoute la longueur de ligne à chaque ligne
la source