Make a simple word wrapper
up vote
18
down vote
favorite
(Note: This is my first ever code golf question, but as far as I can tell, nobody else has done exactly this, so I should be good.)
Your task is to make a program or function that takes in a string s
and an integer n
, and returns or outputs that text wrapped into multiple lines. Each word must be wholly on a line; i.e. no words split in the middle. Each line can be no longer than n
characters long, and you must fit as many words as possible on each line.
Example:
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.
Your output can be an array of strings or a single string with line breaks. Also, you can assume no words will be longer than n
, so don't worry about dealing with weird cases.
Standard I/O rules apply, and standard loopholes are prohibited. Trailing spaces are allowed.
Since this is code-golf, the shortes solution in bytes wins.
Here is an example program in Python that would work.
code-golf string
|
show 9 more comments
up vote
18
down vote
favorite
(Note: This is my first ever code golf question, but as far as I can tell, nobody else has done exactly this, so I should be good.)
Your task is to make a program or function that takes in a string s
and an integer n
, and returns or outputs that text wrapped into multiple lines. Each word must be wholly on a line; i.e. no words split in the middle. Each line can be no longer than n
characters long, and you must fit as many words as possible on each line.
Example:
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.
Your output can be an array of strings or a single string with line breaks. Also, you can assume no words will be longer than n
, so don't worry about dealing with weird cases.
Standard I/O rules apply, and standard loopholes are prohibited. Trailing spaces are allowed.
Since this is code-golf, the shortes solution in bytes wins.
Here is an example program in Python that would work.
code-golf string
Format a list of words
– user202729
Dec 1 at 1:49
3
n is the max line length ? or the length we have to reach before line break ?
– david
Dec 1 at 10:27
1
@david, or the number of lines?
– Peter Taylor
Dec 1 at 13:24
1
28 bytes Python is it relevant?
– david
Dec 1 at 14:12
3
n
is the max line length, sorry that that was not clear. I will clarify. Also, the rules have now been updated so a simple split doesn't work.
– ATMunn
Dec 1 at 16:09
|
show 9 more comments
up vote
18
down vote
favorite
up vote
18
down vote
favorite
(Note: This is my first ever code golf question, but as far as I can tell, nobody else has done exactly this, so I should be good.)
Your task is to make a program or function that takes in a string s
and an integer n
, and returns or outputs that text wrapped into multiple lines. Each word must be wholly on a line; i.e. no words split in the middle. Each line can be no longer than n
characters long, and you must fit as many words as possible on each line.
Example:
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.
Your output can be an array of strings or a single string with line breaks. Also, you can assume no words will be longer than n
, so don't worry about dealing with weird cases.
Standard I/O rules apply, and standard loopholes are prohibited. Trailing spaces are allowed.
Since this is code-golf, the shortes solution in bytes wins.
Here is an example program in Python that would work.
code-golf string
(Note: This is my first ever code golf question, but as far as I can tell, nobody else has done exactly this, so I should be good.)
Your task is to make a program or function that takes in a string s
and an integer n
, and returns or outputs that text wrapped into multiple lines. Each word must be wholly on a line; i.e. no words split in the middle. Each line can be no longer than n
characters long, and you must fit as many words as possible on each line.
Example:
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.
Your output can be an array of strings or a single string with line breaks. Also, you can assume no words will be longer than n
, so don't worry about dealing with weird cases.
Standard I/O rules apply, and standard loopholes are prohibited. Trailing spaces are allowed.
Since this is code-golf, the shortes solution in bytes wins.
Here is an example program in Python that would work.
code-golf string
code-golf string
edited Dec 1 at 17:43
asked Dec 1 at 1:36
ATMunn
1218
1218
Format a list of words
– user202729
Dec 1 at 1:49
3
n is the max line length ? or the length we have to reach before line break ?
– david
Dec 1 at 10:27
1
@david, or the number of lines?
– Peter Taylor
Dec 1 at 13:24
1
28 bytes Python is it relevant?
– david
Dec 1 at 14:12
3
n
is the max line length, sorry that that was not clear. I will clarify. Also, the rules have now been updated so a simple split doesn't work.
– ATMunn
Dec 1 at 16:09
|
show 9 more comments
Format a list of words
– user202729
Dec 1 at 1:49
3
n is the max line length ? or the length we have to reach before line break ?
– david
Dec 1 at 10:27
1
@david, or the number of lines?
– Peter Taylor
Dec 1 at 13:24
1
28 bytes Python is it relevant?
– david
Dec 1 at 14:12
3
n
is the max line length, sorry that that was not clear. I will clarify. Also, the rules have now been updated so a simple split doesn't work.
– ATMunn
Dec 1 at 16:09
Format a list of words
– user202729
Dec 1 at 1:49
Format a list of words
– user202729
Dec 1 at 1:49
3
3
n is the max line length ? or the length we have to reach before line break ?
– david
Dec 1 at 10:27
n is the max line length ? or the length we have to reach before line break ?
– david
Dec 1 at 10:27
1
1
@david, or the number of lines?
– Peter Taylor
Dec 1 at 13:24
@david, or the number of lines?
– Peter Taylor
Dec 1 at 13:24
1
1
28 bytes Python is it relevant?
– david
Dec 1 at 14:12
28 bytes Python is it relevant?
– david
Dec 1 at 14:12
3
3
n
is the max line length, sorry that that was not clear. I will clarify. Also, the rules have now been updated so a simple split doesn't work.– ATMunn
Dec 1 at 16:09
n
is the max line length, sorry that that was not clear. I will clarify. Also, the rules have now been updated so a simple split doesn't work.– ATMunn
Dec 1 at 16:09
|
show 9 more comments
27 Answers
27
active
oldest
votes
up vote
6
down vote
Python 2, 26 bytes
from textwrap import*
fill
Try it online!
Meh... built-ins are boring... instead, have a nice 87-byte solution here:
s,n=input()
x=''
for i in s.split():c=n<len(x+i);exec'print x'*c;x=x*-~-c+i+' '
print x
Try it online!
Outputs trailing spaces.
add a comment |
up vote
5
down vote
PHP, 8 bytes
Admittedly not the most original solution, but PHP has a native function that matches your requirements perfectly!
wordwrap
:
string wordwrap ( string $str [, int $width = 75 [, string $break = "n" [, bool $cut = FALSE ]]] )
Wraps a string to a given number of characters using a string break character.
Use like so:
$str = "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.";
echo wordwrap($str, 50);
Or Try it online!
add a comment |
up vote
5
down vote
Perl 6, 46 29 bytes
{;*.comb(/.**{1..$_}[s|$]/)}
Try it online!
Regex based solution that takes input curried, like f(n)(s)
and returns a list of lines. Each line except the last has a trailing whitespace
Explanation:
{;* } # Anonymous code block that returns a Whatever lambda
.comb(/ /) # Split the string by
.**{1..$_} # Up to n characters
[s|$] # Terminated by a whitespace char or the end of the string
add a comment |
up vote
4
down vote
JavaScript (ES6), 75 73 72 bytes
Takes input as (string)(n)
.
s=>n=>s.split` `.map(w=>r=(u=r?r+' '+w:w)[n]?(o+=r+`
`,w):u,o=r='')&&o+r
Try it online!
Variables
The formatted output is stored in $o$ (in green below).
The updated line $u$ is defined as the concatenation of:
- the current line $r$ (in black below)
- a space if $r$ is not empty, or nothing otherwise (in orange below)
- the new word $w$ (in blue below)
We need to insert a line break whenever the $n$-th character of $u$ is set (0-indexed, in red below).
Example
$n=16$ and $s$ = "LOREM IPSUM DOLOR"
Adding "LOREM":
$$smallbegin{array}{|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|}
hline
00&01&02&03&04&05&06&07&08&09&10&11&12&13&14&15&color{red}{16}\ hline
color{blue}L&color{blue}O&color{blue}R&color{blue}E&color{blue}M&&&&&&&&&&&&\ hlineend{array}
$$
Adding "IPSUM":
$$smallbegin{array}{|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|}
hline
00&01&02&03&04&05&06&07&08&09&10&11&12&13&14&15&color{red}{16}\ hline
L&O&R&E&M&color{orange}bullet&color{blue}I&color{blue}P&color{blue}S&color{blue}U&color{blue}M&&&&&&\ hlineend{array}
$$
Adding "DOLOR":
$$smallbegin{array}{|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|}
hline
00&01&02&03&04&05&06&07&08&09&10&11&12&13&14&15&color{red}{16}\ hline
L&O&R&E&M&bullet&I&P&S&U&M&color{orange}bullet&color{blue}D&color{blue}O&color{blue}L&color{blue}O&color{blue}R\ hlineend{array}
$$
$$smallbegin{array}{|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|}
hline
00&01&02&03&04&05&06&07&08&09&10&11&12&13&14&15&color{red}{16}\ hline
color{green}L&color{green}O&color{green}R&color{green}E&color{green}M&color{green}bullet&color{green}I&color{green}P&color{green}S&color{green}U&color{green}M&color{green}hookleftarrow&&&&&\ hline
D&O&L&O&R&&&&&&&&&&&&\ hlineend{array}
$$
Trailing spaces are allowed. mayber+w+' '
?
– l4m2
Dec 3 at 0:24
add a comment |
up vote
4
down vote
Vim, 15 bytes/keystrokes
DJ:se tw=<C-r>"
gq_
A text formatting question? I know just the tool for the job! And it even has my name in the first two keystrokes :D
<C-r>
means ctrl-r.
This could ever so slightly shorter in V, but I prefer answering in vanilla vim for answers that really show off how concise vim can be for the right challenge. And the difference is so small anyway.
This could also be the following for 15 bytes as well:
:se tw=<C-r><C-w>
ddgq_
Try it online!
1
Explanation:DJ:
: This program has been made by DJ, our favorite cat with a diamond around his neck. [...]
– Erik the Outgolfer
Dec 1 at 19:10
add a comment |
up vote
4
down vote
Haskell, 70 bytes
s!n|length s<=n=[s]|(t,_:d)<-splitAt(until((<'!').(s!!))pred n)s=t:d!n
add a comment |
up vote
3
down vote
Python 2, 74 bytes
s,n=input()
while s:i=n;exec"i-=' '<(s+' '*n)[i];"*n;print s[:i];s=s[i+1:]
Try it online!
add a comment |
up vote
2
down vote
R, 36 27 bytes
R has this as a built-in (strwrap
), we return a vector of split lines.
function(s,n)strwrap(s,n+1)
Try it online!
1
Yes, that should be allowed. Arrays of lines are allowed, so I don't see why this would be any different.
– ATMunn
Dec 1 at 16:14
add a comment |
up vote
2
down vote
Mathematica, 16 bytes
InsertLinebreaks
Built-in function. Takes a string and an integer as input and returns a string as output.
InsertLinebreaks["string", n]
inserts newline characters to make no line longer than n characters.
add a comment |
up vote
2
down vote
Java (JDK), 46 44 bytes
Basically a pure regex solution in Java, almost certainly the shortest I've written.
Cheers to Kevin for helping to cut down the bytes in the regex even further!
n->s->s.replaceAll(".{1,"+n+"}( |$)","$0n")
Try it online!
Using a curried lamdba, it creates a regex to greedily match up to n
characters followed by either a space or end of string. It then replaces those characters with themselves followed by a newline.
@KevinCruijssen[ $]
actually just matches a space or$
if I remember correctly, rather than the end of string. It does seem to work though, so it looks like it can just be golfed down to a single space for even fewer bytes.
– Luke Stevens
17 hours ago
Ah, it can indeed be just a space, since you add newlines and don't need to add an additional trailing newline at the end.
– Kevin Cruijssen
17 hours ago
1
You can golf 2 more bytes removing the parenthesis in the regex, and use$0
instead of$1
.
– Kevin Cruijssen
17 hours ago
@KevinCruijssen Nice one! It's just a shame thatreplaceAll
is so verbose!
– Luke Stevens
17 hours ago
2
For me it is wrong, appear if I modify the Latin phrase of the exercise in the way it end with"...dictum varius a b c erat." There is a unnecessary new line after c letter...
– RosLuP
11 hours ago
|
show 1 more comment
up vote
2
down vote
C (gcc), 68 bytes
i;b(s,n,l)char*s,*l;{for(i=n;*++s;i--||(i=l-s+n,*l=10))l=*s-32?l:s;}
Try it online!
Thanks to ceilingcat, save 2 bytes by moving global char*l
to parameter.
1
Suggestb(s,n,l)char*s,*l;
instead ofchar*l;b(s,n)char*s;
– ceilingcat
11 hours ago
add a comment |
up vote
1
down vote
Retina 0.8.2, 37 bytes
.+$
$*
!`(?=S.*¶(1)+)(?<-1>.)+(?=s)
Try it online! Takes s
and n
on separate lines. Explanation:
.+$
$*
Convert n
to unary.
(?=S.*¶(1)+)(?<-1>.)+(?=s)
Match non-whitespace, then look ahead to n
and count it as $#1
. Then go back and use a balancing group to match up to n
characters followed by whitespace.
!`
Output the matches as a list of lines.
Is there a way in Retina to put the first input in a regex we use with the second input? So something like this:.{1,50}
and$0¶
, but where50
is received as input instead?
– Kevin Cruijssen
17 hours ago
@KevinCruijssen In Retina 1 you can probably use an Eval stage to give a similar result, but that's boring, so I didn't bother.
– Neil
14 hours ago
add a comment |
up vote
1
down vote
Charcoal, 19 bytes
Nθ←F⪪S «¿‹⁺LιⅈθM→⸿ι
Try it online! Link is to verbose version of code. Takes input of n
and s
on separate lines. Explanation:
Nθ
Input n
.
←
Move the cursor left one square to balance the right movement from the first iteration of the loop.
F⪪S «
Split the string on spaces and loop over the words.
¿‹⁺Lιⅈθ
Calculate whether the next word will reach the right edge.
M→
If it will not then move one square right.
⸿
If it will then start a new line.
ι
Output the word.
add a comment |
up vote
1
down vote
Red, 125, 117, 114 112 bytes
func[s n][d: 0 parse s[any[to" "p:" "opt[[to" "| to end]q:(if(-1 - d + index? q)> n[p/1: #"^/"d: index? p])]]]s]
Try it online!
add a comment |
up vote
1
down vote
Powershell, 40 83 bytes
Test case with n=80
added.
param($s,$n)$s-split' '|%{if(($o+$_|% le*)-lt$n){$o+=' '*!!$o+$_}else{$o;$o=$_}}
$o
Test script:
$f = {
param($s,$n)$s-split' '|%{if(($o+$_|% le*)-lt$n){$o+=' '*!!$o+$_}else{$o;$o=$_}}
$o
}
@(
,(50, "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.",
"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.")
,(80, "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.",
"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,$s,$expected = $_
$result = &$f $s $n
"$result"-eq"$expected"
# $result # uncomment this line to dispaly a result
}
Output:
True
True
add a comment |
up vote
1
down vote
Java 8, 135 bytes
n->s->{String r="",S=s.split(" "),t=r;for(int i=0;i<S.length;)if((t+S[i]).length()>n){r+=t+"n";t="";}else t+=S[i++]+" ";return r+t;}
Try it online.
Explanation:
n->s->{ // Method with integer & String parameters and String return
String r="", // Result-String, starting empty
S=s.split(" "), // Input-String split by spaces
t=r; // Temp-String, starting empty as well
for(int i=0;i<S.length;) // Loop `i` in the range [0, amount_of_words):
if((t+S[i]).length()>n){ // If `t` and the word are larger than the integer input:
r+=t+"n"; // Add `t` and a newline to the result
t="";} // And reset `t` to an empty String
else // Else:
t+=S[i++]+" "; // Append the word and a space to `t`
// (and then increase `i` by 1 with `i++` for the next word
// of the next iteration)
return r+t;} // Return the result-String appended with `t` as result
add a comment |
up vote
1
down vote
Japt, 24 bytes
¸r@[XY]q(X·Ì+S+Y Ê>V?R:S
Try it online!
Thanks to Bubbler for removing some duplication.
Explanation:
¸ :Split into words
r@ :Reduce back into a string by:
X : Start with the already reduced portion
·Ì : Get the last line
+S+Y : Add a space and the next word
Ê>V? : If the length of that line is greater than n:
R : Choose newline
: : Otherwise:
S : Choose space
[XY]q( : Join the next word to the result using the chosen character
24 bytes with[X,Y].join(...)
.
– Bubbler
2 days ago
add a comment |
up vote
1
down vote
JavaScript, 40 bytes
s=>n=>eval(`s.match(/.{1,${n}}( |$)/g)`)
Try it online!
Fail at the end
– l4m2
2 days ago
@l4m2 fixed....
– tsh
2 days ago
add a comment |
up vote
0
down vote
Thanks to @Erik the Outgolfer, a golfed version :
Python 3, 94 bytes
def f(t,n):
while t:i=n+(t[min(len(t)-1,n)]==" "or-t[n-1::-1].find(' '));print(t[:i]);t=t[i:]
Try it online!
# Python 3, 130 bytes
def f(t,n):
l=
while len(t):
i=(n-t[:n][::-1].find(' '),n+1)[t[min(len(t)-1,n)]==" "]
l.append(t[:i])
t=t[i::]
return l
Try it online!
Not so golfed version...
1
Some golfs. (prints to STDOUT, doesn't return).
– Erik the Outgolfer
Dec 1 at 18:31
add a comment |
up vote
0
down vote
JavaScript + HTML + CSS, 117 64 bytes
-53 bytes courtesy of @Neil
n=50
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."
f=(n,s)=>document.body.innerHTML+=`<tt><p style=width:${n}ch>${s}`
f(n,s)
1
At least in my browser you can cut this down to(n,s)=>document.body.innerHTML+=`<p style=width:${n}ch><tt>${s}</tt></p>`
for 74 bytes. If you're willing to dig out old versions of Firefox you can save another 8 bytes with(n,s)=>document.body.innerHTML+=`<pre wrap width=${n}>${s}</pre>`
.
– Neil
Dec 1 at 12:33
@Neil Nice use ofch
units. Firefox 65 computes50ch
as500px
; Chromium 70 computes50ch
as400px
– guest271314
Dec 1 at 18:28
This answer is wrong.elit. Sed eget erat lectus. Morbi mi mi, fringilla sed
(2nd line) is more than 50 characters. I'm using the newest Chrome.
– mbomb007
Dec 1 at 19:59
I was able to tweak my original suggestion to work in Chrome by putting the<p>
inside the<tt>
.
– Neil
Dec 1 at 20:16
1
next.plnkr.co/edit/fT2moRe5qgsxj48p?open=lib%2Fscript.js
– Neil
Dec 1 at 20:29
|
show 1 more comment
up vote
0
down vote
C# (Visual C# Interactive Compiler), 91 bytes
s=>n=>s.Split(' ').Aggregate((a,w)=>a+(a.Length-a.LastIndexOf('n')+w.Length>n?'n':' ')+w)
Try it online!
add a comment |
up vote
0
down vote
Jelly, 12 bytes
ḲŒṖK€€ḣ€ƑƇṪY
Try it online!
Unfortunately, this is too slow to work for the provided test case in under a minute over TIO.
add a comment |
up vote
0
down vote
C# (.NET Core), 162 bytes
stringt(string n,int a){var g="";for(int i=0;i++<Math.Floor((double)n.Length/a);)g+=$"^.{{{i*a-1}}}|";return Regex.Split(n,$@"(?n)(?<=({g.Trim('|')})S*)s");}}
This function uses a regex which matches the closest whitespace that is near the nth or multiple of nth character and splits the string based on it.
Try it online!
The TIO link is a full program, and the function has a static keyword so the function can be called from main.
Test Regex
This doesn't give the right output for the test case - some lines are longer than 50 characters. You want "before" not "near", and also the splitting at one point must depend on where it was split earlier.
– Ørjan Johansen
2 days ago
add a comment |
up vote
0
down vote
05AB1E, 18 bytes
õs#vDy«g²›i,}yðJ}?
Try it online.
Explanation:
õ # Push an empty string "" to the stack
s # Swap to take the (implicit) string input
# # Split it by spaces
v } # For-each `y` over the words:
D # Duplicate the top of the stack
# (which is the empty string in the very first iteration)
y« # Append the current word `y`
g # Get its length
²›i } # If its lengthy is larger than the second input:
, # Pop and output the current duplicated value with trailing newline
yð # Push the word `y` and a space " "
J # Join the entire stack together
? # After the loop, output the last part as well (without newline)
add a comment |
up vote
0
down vote
C, 251 bytes
#define U unsigned
#define R(x,y) if(x)return y
U b(char*a,U n){U c,q,r=1,i,j,w;R(!a||n<1||n++>0xFFFFFFF,-1);for(w=j=c=i=0;;++i,++c){R(i==-1,-1);q=a[i];if(q==10)goto l;if(c>=n){j?(a[j]=10):0;i=i-j<n?j:(w=1);l:c=-1;++r;}R(!q||w,w?-1:r);if(q==32)j=i;}}
The function of this exercise b(a,n) breaks the line "a" as exercise said,
in the way not change its lengh (if we see the result as one string) because change some spaces in n or new line.
If find one error it return -1, else it return the number of line of that result in 'a' (as input).
test result and code indented
Lorem ipsum dolor sit amet, consectetur adipiscing [50]
elit. Sed eget erat lectus. Morbi mi mi, fringilla [50]
sed suscipit ullamcorper, tristique at mauris. [46]
Morbi non commodo nibh. Pellentesque habitant [45]
morbi tristique senectus et netus et malesuada [46]
fames ac turpis egestas. Sed at iaculis mauris. [47]
Praesent a sem augue. Nulla lectus sapien, auctor [49]
nec pharetra eu, tincidunt ac diam. Sed ligula [46]
arcu, aliquam quis velit aliquam, dictum varius [47]
erat. [5]
#define U unsigned
#define R(x,y) if(x)return y
#define G goto
U RompiLinea(char*a,U n)
{U c,q,r=1,i,j,w;
R(!a||n<1||n++>0xFFFFFFF,-1);
for(w=j=c=i=0;;++i,++c)
{R(i==-1,-1);q=a[i];
if(q==10)G l;
if(c>=n){j?(a[j]=10):0;i=i-j<n?j:(w=1);l:c=-1;++r;}
R(!q||w,w?-1:r);
if(q==32)j=i;
}
}
1
147 bytes
– ceilingcat
yesterday
@ceilingcat ok, above code would make in consideration the n too... one bug I found with the code was that the last line was not correctly print... why do you not write your C answer as other? It would win on mine because it is more short... for say the true I use the first line(or statement ";") for the check of input only because for me input has to be checked even if that is a little more long; I unsuccessful try to write the function in APL...
– RosLuP
17 hours ago
add a comment |
up vote
-1
down vote
Bash/Coreutils, 8 bytes
fold -sw <n>
Try It Online!
The fold utility, that's bundled along with coreutils, does exactly what the question asks. The -s
flag makes it so that it only breaks on whitespaces(ie. when the word ends), the value of n is passed using the argument -w
. Input is accepted via stdin
Unfortunately, that doesn't work for the test case from the question, because fold counts a trailing space as one of the 50 bytes.
– Dennis♦
Dec 1 at 19:43
1
On a side note, only full programs and functions are allowed by default.fold -sw$1
(orfold -s$1
) would comply with that rule.
– Dennis♦
Dec 1 at 19:43
add a comment |
up vote
-1
down vote
Python 3, 77 bytes, without using any library, thank @Jo King for point out my mistake:
def w(s, m):
for i in range(0,len(s),m):
print(s[i:i+m].lstrip())
demo: https://repl.it/repls/TeemingJoyousRepository
New contributor
This splits words in half, rather than splitting by spaces only
– Jo King
30 mins ago
I just edited my answer, thank you @JoKing
– chau giang
3 mins ago
add a comment |
27 Answers
27
active
oldest
votes
27 Answers
27
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
6
down vote
Python 2, 26 bytes
from textwrap import*
fill
Try it online!
Meh... built-ins are boring... instead, have a nice 87-byte solution here:
s,n=input()
x=''
for i in s.split():c=n<len(x+i);exec'print x'*c;x=x*-~-c+i+' '
print x
Try it online!
Outputs trailing spaces.
add a comment |
up vote
6
down vote
Python 2, 26 bytes
from textwrap import*
fill
Try it online!
Meh... built-ins are boring... instead, have a nice 87-byte solution here:
s,n=input()
x=''
for i in s.split():c=n<len(x+i);exec'print x'*c;x=x*-~-c+i+' '
print x
Try it online!
Outputs trailing spaces.
add a comment |
up vote
6
down vote
up vote
6
down vote
Python 2, 26 bytes
from textwrap import*
fill
Try it online!
Meh... built-ins are boring... instead, have a nice 87-byte solution here:
s,n=input()
x=''
for i in s.split():c=n<len(x+i);exec'print x'*c;x=x*-~-c+i+' '
print x
Try it online!
Outputs trailing spaces.
Python 2, 26 bytes
from textwrap import*
fill
Try it online!
Meh... built-ins are boring... instead, have a nice 87-byte solution here:
s,n=input()
x=''
for i in s.split():c=n<len(x+i);exec'print x'*c;x=x*-~-c+i+' '
print x
Try it online!
Outputs trailing spaces.
edited Dec 1 at 18:43
answered Dec 1 at 16:16
Erik the Outgolfer
31k429102
31k429102
add a comment |
add a comment |
up vote
5
down vote
PHP, 8 bytes
Admittedly not the most original solution, but PHP has a native function that matches your requirements perfectly!
wordwrap
:
string wordwrap ( string $str [, int $width = 75 [, string $break = "n" [, bool $cut = FALSE ]]] )
Wraps a string to a given number of characters using a string break character.
Use like so:
$str = "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.";
echo wordwrap($str, 50);
Or Try it online!
add a comment |
up vote
5
down vote
PHP, 8 bytes
Admittedly not the most original solution, but PHP has a native function that matches your requirements perfectly!
wordwrap
:
string wordwrap ( string $str [, int $width = 75 [, string $break = "n" [, bool $cut = FALSE ]]] )
Wraps a string to a given number of characters using a string break character.
Use like so:
$str = "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.";
echo wordwrap($str, 50);
Or Try it online!
add a comment |
up vote
5
down vote
up vote
5
down vote
PHP, 8 bytes
Admittedly not the most original solution, but PHP has a native function that matches your requirements perfectly!
wordwrap
:
string wordwrap ( string $str [, int $width = 75 [, string $break = "n" [, bool $cut = FALSE ]]] )
Wraps a string to a given number of characters using a string break character.
Use like so:
$str = "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.";
echo wordwrap($str, 50);
Or Try it online!
PHP, 8 bytes
Admittedly not the most original solution, but PHP has a native function that matches your requirements perfectly!
wordwrap
:
string wordwrap ( string $str [, int $width = 75 [, string $break = "n" [, bool $cut = FALSE ]]] )
Wraps a string to a given number of characters using a string break character.
Use like so:
$str = "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.";
echo wordwrap($str, 50);
Or Try it online!
edited Dec 1 at 5:30
answered Dec 1 at 5:03
Davіd
4358
4358
add a comment |
add a comment |
up vote
5
down vote
Perl 6, 46 29 bytes
{;*.comb(/.**{1..$_}[s|$]/)}
Try it online!
Regex based solution that takes input curried, like f(n)(s)
and returns a list of lines. Each line except the last has a trailing whitespace
Explanation:
{;* } # Anonymous code block that returns a Whatever lambda
.comb(/ /) # Split the string by
.**{1..$_} # Up to n characters
[s|$] # Terminated by a whitespace char or the end of the string
add a comment |
up vote
5
down vote
Perl 6, 46 29 bytes
{;*.comb(/.**{1..$_}[s|$]/)}
Try it online!
Regex based solution that takes input curried, like f(n)(s)
and returns a list of lines. Each line except the last has a trailing whitespace
Explanation:
{;* } # Anonymous code block that returns a Whatever lambda
.comb(/ /) # Split the string by
.**{1..$_} # Up to n characters
[s|$] # Terminated by a whitespace char or the end of the string
add a comment |
up vote
5
down vote
up vote
5
down vote
Perl 6, 46 29 bytes
{;*.comb(/.**{1..$_}[s|$]/)}
Try it online!
Regex based solution that takes input curried, like f(n)(s)
and returns a list of lines. Each line except the last has a trailing whitespace
Explanation:
{;* } # Anonymous code block that returns a Whatever lambda
.comb(/ /) # Split the string by
.**{1..$_} # Up to n characters
[s|$] # Terminated by a whitespace char or the end of the string
Perl 6, 46 29 bytes
{;*.comb(/.**{1..$_}[s|$]/)}
Try it online!
Regex based solution that takes input curried, like f(n)(s)
and returns a list of lines. Each line except the last has a trailing whitespace
Explanation:
{;* } # Anonymous code block that returns a Whatever lambda
.comb(/ /) # Split the string by
.**{1..$_} # Up to n characters
[s|$] # Terminated by a whitespace char or the end of the string
edited Dec 2 at 8:53
answered Dec 1 at 5:32
Jo King
19.9k245105
19.9k245105
add a comment |
add a comment |
up vote
4
down vote
JavaScript (ES6), 75 73 72 bytes
Takes input as (string)(n)
.
s=>n=>s.split` `.map(w=>r=(u=r?r+' '+w:w)[n]?(o+=r+`
`,w):u,o=r='')&&o+r
Try it online!
Variables
The formatted output is stored in $o$ (in green below).
The updated line $u$ is defined as the concatenation of:
- the current line $r$ (in black below)
- a space if $r$ is not empty, or nothing otherwise (in orange below)
- the new word $w$ (in blue below)
We need to insert a line break whenever the $n$-th character of $u$ is set (0-indexed, in red below).
Example
$n=16$ and $s$ = "LOREM IPSUM DOLOR"
Adding "LOREM":
$$smallbegin{array}{|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|}
hline
00&01&02&03&04&05&06&07&08&09&10&11&12&13&14&15&color{red}{16}\ hline
color{blue}L&color{blue}O&color{blue}R&color{blue}E&color{blue}M&&&&&&&&&&&&\ hlineend{array}
$$
Adding "IPSUM":
$$smallbegin{array}{|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|}
hline
00&01&02&03&04&05&06&07&08&09&10&11&12&13&14&15&color{red}{16}\ hline
L&O&R&E&M&color{orange}bullet&color{blue}I&color{blue}P&color{blue}S&color{blue}U&color{blue}M&&&&&&\ hlineend{array}
$$
Adding "DOLOR":
$$smallbegin{array}{|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|}
hline
00&01&02&03&04&05&06&07&08&09&10&11&12&13&14&15&color{red}{16}\ hline
L&O&R&E&M&bullet&I&P&S&U&M&color{orange}bullet&color{blue}D&color{blue}O&color{blue}L&color{blue}O&color{blue}R\ hlineend{array}
$$
$$smallbegin{array}{|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|}
hline
00&01&02&03&04&05&06&07&08&09&10&11&12&13&14&15&color{red}{16}\ hline
color{green}L&color{green}O&color{green}R&color{green}E&color{green}M&color{green}bullet&color{green}I&color{green}P&color{green}S&color{green}U&color{green}M&color{green}hookleftarrow&&&&&\ hline
D&O&L&O&R&&&&&&&&&&&&\ hlineend{array}
$$
Trailing spaces are allowed. mayber+w+' '
?
– l4m2
Dec 3 at 0:24
add a comment |
up vote
4
down vote
JavaScript (ES6), 75 73 72 bytes
Takes input as (string)(n)
.
s=>n=>s.split` `.map(w=>r=(u=r?r+' '+w:w)[n]?(o+=r+`
`,w):u,o=r='')&&o+r
Try it online!
Variables
The formatted output is stored in $o$ (in green below).
The updated line $u$ is defined as the concatenation of:
- the current line $r$ (in black below)
- a space if $r$ is not empty, or nothing otherwise (in orange below)
- the new word $w$ (in blue below)
We need to insert a line break whenever the $n$-th character of $u$ is set (0-indexed, in red below).
Example
$n=16$ and $s$ = "LOREM IPSUM DOLOR"
Adding "LOREM":
$$smallbegin{array}{|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|}
hline
00&01&02&03&04&05&06&07&08&09&10&11&12&13&14&15&color{red}{16}\ hline
color{blue}L&color{blue}O&color{blue}R&color{blue}E&color{blue}M&&&&&&&&&&&&\ hlineend{array}
$$
Adding "IPSUM":
$$smallbegin{array}{|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|}
hline
00&01&02&03&04&05&06&07&08&09&10&11&12&13&14&15&color{red}{16}\ hline
L&O&R&E&M&color{orange}bullet&color{blue}I&color{blue}P&color{blue}S&color{blue}U&color{blue}M&&&&&&\ hlineend{array}
$$
Adding "DOLOR":
$$smallbegin{array}{|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|}
hline
00&01&02&03&04&05&06&07&08&09&10&11&12&13&14&15&color{red}{16}\ hline
L&O&R&E&M&bullet&I&P&S&U&M&color{orange}bullet&color{blue}D&color{blue}O&color{blue}L&color{blue}O&color{blue}R\ hlineend{array}
$$
$$smallbegin{array}{|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|}
hline
00&01&02&03&04&05&06&07&08&09&10&11&12&13&14&15&color{red}{16}\ hline
color{green}L&color{green}O&color{green}R&color{green}E&color{green}M&color{green}bullet&color{green}I&color{green}P&color{green}S&color{green}U&color{green}M&color{green}hookleftarrow&&&&&\ hline
D&O&L&O&R&&&&&&&&&&&&\ hlineend{array}
$$
Trailing spaces are allowed. mayber+w+' '
?
– l4m2
Dec 3 at 0:24
add a comment |
up vote
4
down vote
up vote
4
down vote
JavaScript (ES6), 75 73 72 bytes
Takes input as (string)(n)
.
s=>n=>s.split` `.map(w=>r=(u=r?r+' '+w:w)[n]?(o+=r+`
`,w):u,o=r='')&&o+r
Try it online!
Variables
The formatted output is stored in $o$ (in green below).
The updated line $u$ is defined as the concatenation of:
- the current line $r$ (in black below)
- a space if $r$ is not empty, or nothing otherwise (in orange below)
- the new word $w$ (in blue below)
We need to insert a line break whenever the $n$-th character of $u$ is set (0-indexed, in red below).
Example
$n=16$ and $s$ = "LOREM IPSUM DOLOR"
Adding "LOREM":
$$smallbegin{array}{|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|}
hline
00&01&02&03&04&05&06&07&08&09&10&11&12&13&14&15&color{red}{16}\ hline
color{blue}L&color{blue}O&color{blue}R&color{blue}E&color{blue}M&&&&&&&&&&&&\ hlineend{array}
$$
Adding "IPSUM":
$$smallbegin{array}{|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|}
hline
00&01&02&03&04&05&06&07&08&09&10&11&12&13&14&15&color{red}{16}\ hline
L&O&R&E&M&color{orange}bullet&color{blue}I&color{blue}P&color{blue}S&color{blue}U&color{blue}M&&&&&&\ hlineend{array}
$$
Adding "DOLOR":
$$smallbegin{array}{|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|}
hline
00&01&02&03&04&05&06&07&08&09&10&11&12&13&14&15&color{red}{16}\ hline
L&O&R&E&M&bullet&I&P&S&U&M&color{orange}bullet&color{blue}D&color{blue}O&color{blue}L&color{blue}O&color{blue}R\ hlineend{array}
$$
$$smallbegin{array}{|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|}
hline
00&01&02&03&04&05&06&07&08&09&10&11&12&13&14&15&color{red}{16}\ hline
color{green}L&color{green}O&color{green}R&color{green}E&color{green}M&color{green}bullet&color{green}I&color{green}P&color{green}S&color{green}U&color{green}M&color{green}hookleftarrow&&&&&\ hline
D&O&L&O&R&&&&&&&&&&&&\ hlineend{array}
$$
JavaScript (ES6), 75 73 72 bytes
Takes input as (string)(n)
.
s=>n=>s.split` `.map(w=>r=(u=r?r+' '+w:w)[n]?(o+=r+`
`,w):u,o=r='')&&o+r
Try it online!
Variables
The formatted output is stored in $o$ (in green below).
The updated line $u$ is defined as the concatenation of:
- the current line $r$ (in black below)
- a space if $r$ is not empty, or nothing otherwise (in orange below)
- the new word $w$ (in blue below)
We need to insert a line break whenever the $n$-th character of $u$ is set (0-indexed, in red below).
Example
$n=16$ and $s$ = "LOREM IPSUM DOLOR"
Adding "LOREM":
$$smallbegin{array}{|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|}
hline
00&01&02&03&04&05&06&07&08&09&10&11&12&13&14&15&color{red}{16}\ hline
color{blue}L&color{blue}O&color{blue}R&color{blue}E&color{blue}M&&&&&&&&&&&&\ hlineend{array}
$$
Adding "IPSUM":
$$smallbegin{array}{|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|}
hline
00&01&02&03&04&05&06&07&08&09&10&11&12&13&14&15&color{red}{16}\ hline
L&O&R&E&M&color{orange}bullet&color{blue}I&color{blue}P&color{blue}S&color{blue}U&color{blue}M&&&&&&\ hlineend{array}
$$
Adding "DOLOR":
$$smallbegin{array}{|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|}
hline
00&01&02&03&04&05&06&07&08&09&10&11&12&13&14&15&color{red}{16}\ hline
L&O&R&E&M&bullet&I&P&S&U&M&color{orange}bullet&color{blue}D&color{blue}O&color{blue}L&color{blue}O&color{blue}R\ hlineend{array}
$$
$$smallbegin{array}{|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|}
hline
00&01&02&03&04&05&06&07&08&09&10&11&12&13&14&15&color{red}{16}\ hline
color{green}L&color{green}O&color{green}R&color{green}E&color{green}M&color{green}bullet&color{green}I&color{green}P&color{green}S&color{green}U&color{green}M&color{green}hookleftarrow&&&&&\ hline
D&O&L&O&R&&&&&&&&&&&&\ hlineend{array}
$$
edited Dec 1 at 15:02
answered Dec 1 at 1:45
Arnauld
70.5k687298
70.5k687298
Trailing spaces are allowed. mayber+w+' '
?
– l4m2
Dec 3 at 0:24
add a comment |
Trailing spaces are allowed. mayber+w+' '
?
– l4m2
Dec 3 at 0:24
Trailing spaces are allowed. maybe
r+w+' '
?– l4m2
Dec 3 at 0:24
Trailing spaces are allowed. maybe
r+w+' '
?– l4m2
Dec 3 at 0:24
add a comment |
up vote
4
down vote
Vim, 15 bytes/keystrokes
DJ:se tw=<C-r>"
gq_
A text formatting question? I know just the tool for the job! And it even has my name in the first two keystrokes :D
<C-r>
means ctrl-r.
This could ever so slightly shorter in V, but I prefer answering in vanilla vim for answers that really show off how concise vim can be for the right challenge. And the difference is so small anyway.
This could also be the following for 15 bytes as well:
:se tw=<C-r><C-w>
ddgq_
Try it online!
1
Explanation:DJ:
: This program has been made by DJ, our favorite cat with a diamond around his neck. [...]
– Erik the Outgolfer
Dec 1 at 19:10
add a comment |
up vote
4
down vote
Vim, 15 bytes/keystrokes
DJ:se tw=<C-r>"
gq_
A text formatting question? I know just the tool for the job! And it even has my name in the first two keystrokes :D
<C-r>
means ctrl-r.
This could ever so slightly shorter in V, but I prefer answering in vanilla vim for answers that really show off how concise vim can be for the right challenge. And the difference is so small anyway.
This could also be the following for 15 bytes as well:
:se tw=<C-r><C-w>
ddgq_
Try it online!
1
Explanation:DJ:
: This program has been made by DJ, our favorite cat with a diamond around his neck. [...]
– Erik the Outgolfer
Dec 1 at 19:10
add a comment |
up vote
4
down vote
up vote
4
down vote
Vim, 15 bytes/keystrokes
DJ:se tw=<C-r>"
gq_
A text formatting question? I know just the tool for the job! And it even has my name in the first two keystrokes :D
<C-r>
means ctrl-r.
This could ever so slightly shorter in V, but I prefer answering in vanilla vim for answers that really show off how concise vim can be for the right challenge. And the difference is so small anyway.
This could also be the following for 15 bytes as well:
:se tw=<C-r><C-w>
ddgq_
Try it online!
Vim, 15 bytes/keystrokes
DJ:se tw=<C-r>"
gq_
A text formatting question? I know just the tool for the job! And it even has my name in the first two keystrokes :D
<C-r>
means ctrl-r.
This could ever so slightly shorter in V, but I prefer answering in vanilla vim for answers that really show off how concise vim can be for the right challenge. And the difference is so small anyway.
This could also be the following for 15 bytes as well:
:se tw=<C-r><C-w>
ddgq_
Try it online!
edited Dec 1 at 16:39
answered Dec 1 at 1:52
DJMcMayhem♦
40.7k11145308
40.7k11145308
1
Explanation:DJ:
: This program has been made by DJ, our favorite cat with a diamond around his neck. [...]
– Erik the Outgolfer
Dec 1 at 19:10
add a comment |
1
Explanation:DJ:
: This program has been made by DJ, our favorite cat with a diamond around his neck. [...]
– Erik the Outgolfer
Dec 1 at 19:10
1
1
Explanation:
DJ:
: This program has been made by DJ, our favorite cat with a diamond around his neck. [...]– Erik the Outgolfer
Dec 1 at 19:10
Explanation:
DJ:
: This program has been made by DJ, our favorite cat with a diamond around his neck. [...]– Erik the Outgolfer
Dec 1 at 19:10
add a comment |
up vote
4
down vote
Haskell, 70 bytes
s!n|length s<=n=[s]|(t,_:d)<-splitAt(until((<'!').(s!!))pred n)s=t:d!n
add a comment |
up vote
4
down vote
Haskell, 70 bytes
s!n|length s<=n=[s]|(t,_:d)<-splitAt(until((<'!').(s!!))pred n)s=t:d!n
add a comment |
up vote
4
down vote
up vote
4
down vote
Haskell, 70 bytes
s!n|length s<=n=[s]|(t,_:d)<-splitAt(until((<'!').(s!!))pred n)s=t:d!n
Haskell, 70 bytes
s!n|length s<=n=[s]|(t,_:d)<-splitAt(until((<'!').(s!!))pred n)s=t:d!n
edited Dec 1 at 20:11
answered Dec 1 at 19:45
Lynn
49.3k794226
49.3k794226
add a comment |
add a comment |
up vote
3
down vote
Python 2, 74 bytes
s,n=input()
while s:i=n;exec"i-=' '<(s+' '*n)[i];"*n;print s[:i];s=s[i+1:]
Try it online!
add a comment |
up vote
3
down vote
Python 2, 74 bytes
s,n=input()
while s:i=n;exec"i-=' '<(s+' '*n)[i];"*n;print s[:i];s=s[i+1:]
Try it online!
add a comment |
up vote
3
down vote
up vote
3
down vote
Python 2, 74 bytes
s,n=input()
while s:i=n;exec"i-=' '<(s+' '*n)[i];"*n;print s[:i];s=s[i+1:]
Try it online!
Python 2, 74 bytes
s,n=input()
while s:i=n;exec"i-=' '<(s+' '*n)[i];"*n;print s[:i];s=s[i+1:]
Try it online!
answered Dec 1 at 20:11
Lynn
49.3k794226
49.3k794226
add a comment |
add a comment |
up vote
2
down vote
R, 36 27 bytes
R has this as a built-in (strwrap
), we return a vector of split lines.
function(s,n)strwrap(s,n+1)
Try it online!
1
Yes, that should be allowed. Arrays of lines are allowed, so I don't see why this would be any different.
– ATMunn
Dec 1 at 16:14
add a comment |
up vote
2
down vote
R, 36 27 bytes
R has this as a built-in (strwrap
), we return a vector of split lines.
function(s,n)strwrap(s,n+1)
Try it online!
1
Yes, that should be allowed. Arrays of lines are allowed, so I don't see why this would be any different.
– ATMunn
Dec 1 at 16:14
add a comment |
up vote
2
down vote
up vote
2
down vote
R, 36 27 bytes
R has this as a built-in (strwrap
), we return a vector of split lines.
function(s,n)strwrap(s,n+1)
Try it online!
R, 36 27 bytes
R has this as a built-in (strwrap
), we return a vector of split lines.
function(s,n)strwrap(s,n+1)
Try it online!
edited Dec 1 at 18:04
answered Dec 1 at 13:56
J.Doe
2,091112
2,091112
1
Yes, that should be allowed. Arrays of lines are allowed, so I don't see why this would be any different.
– ATMunn
Dec 1 at 16:14
add a comment |
1
Yes, that should be allowed. Arrays of lines are allowed, so I don't see why this would be any different.
– ATMunn
Dec 1 at 16:14
1
1
Yes, that should be allowed. Arrays of lines are allowed, so I don't see why this would be any different.
– ATMunn
Dec 1 at 16:14
Yes, that should be allowed. Arrays of lines are allowed, so I don't see why this would be any different.
– ATMunn
Dec 1 at 16:14
add a comment |
up vote
2
down vote
Mathematica, 16 bytes
InsertLinebreaks
Built-in function. Takes a string and an integer as input and returns a string as output.
InsertLinebreaks["string", n]
inserts newline characters to make no line longer than n characters.
add a comment |
up vote
2
down vote
Mathematica, 16 bytes
InsertLinebreaks
Built-in function. Takes a string and an integer as input and returns a string as output.
InsertLinebreaks["string", n]
inserts newline characters to make no line longer than n characters.
add a comment |
up vote
2
down vote
up vote
2
down vote
Mathematica, 16 bytes
InsertLinebreaks
Built-in function. Takes a string and an integer as input and returns a string as output.
InsertLinebreaks["string", n]
inserts newline characters to make no line longer than n characters.
Mathematica, 16 bytes
InsertLinebreaks
Built-in function. Takes a string and an integer as input and returns a string as output.
InsertLinebreaks["string", n]
inserts newline characters to make no line longer than n characters.
edited Dec 2 at 19:28
answered Dec 2 at 18:57
LegionMammal978
15k41752
15k41752
add a comment |
add a comment |
up vote
2
down vote
Java (JDK), 46 44 bytes
Basically a pure regex solution in Java, almost certainly the shortest I've written.
Cheers to Kevin for helping to cut down the bytes in the regex even further!
n->s->s.replaceAll(".{1,"+n+"}( |$)","$0n")
Try it online!
Using a curried lamdba, it creates a regex to greedily match up to n
characters followed by either a space or end of string. It then replaces those characters with themselves followed by a newline.
@KevinCruijssen[ $]
actually just matches a space or$
if I remember correctly, rather than the end of string. It does seem to work though, so it looks like it can just be golfed down to a single space for even fewer bytes.
– Luke Stevens
17 hours ago
Ah, it can indeed be just a space, since you add newlines and don't need to add an additional trailing newline at the end.
– Kevin Cruijssen
17 hours ago
1
You can golf 2 more bytes removing the parenthesis in the regex, and use$0
instead of$1
.
– Kevin Cruijssen
17 hours ago
@KevinCruijssen Nice one! It's just a shame thatreplaceAll
is so verbose!
– Luke Stevens
17 hours ago
2
For me it is wrong, appear if I modify the Latin phrase of the exercise in the way it end with"...dictum varius a b c erat." There is a unnecessary new line after c letter...
– RosLuP
11 hours ago
|
show 1 more comment
up vote
2
down vote
Java (JDK), 46 44 bytes
Basically a pure regex solution in Java, almost certainly the shortest I've written.
Cheers to Kevin for helping to cut down the bytes in the regex even further!
n->s->s.replaceAll(".{1,"+n+"}( |$)","$0n")
Try it online!
Using a curried lamdba, it creates a regex to greedily match up to n
characters followed by either a space or end of string. It then replaces those characters with themselves followed by a newline.
@KevinCruijssen[ $]
actually just matches a space or$
if I remember correctly, rather than the end of string. It does seem to work though, so it looks like it can just be golfed down to a single space for even fewer bytes.
– Luke Stevens
17 hours ago
Ah, it can indeed be just a space, since you add newlines and don't need to add an additional trailing newline at the end.
– Kevin Cruijssen
17 hours ago
1
You can golf 2 more bytes removing the parenthesis in the regex, and use$0
instead of$1
.
– Kevin Cruijssen
17 hours ago
@KevinCruijssen Nice one! It's just a shame thatreplaceAll
is so verbose!
– Luke Stevens
17 hours ago
2
For me it is wrong, appear if I modify the Latin phrase of the exercise in the way it end with"...dictum varius a b c erat." There is a unnecessary new line after c letter...
– RosLuP
11 hours ago
|
show 1 more comment
up vote
2
down vote
up vote
2
down vote
Java (JDK), 46 44 bytes
Basically a pure regex solution in Java, almost certainly the shortest I've written.
Cheers to Kevin for helping to cut down the bytes in the regex even further!
n->s->s.replaceAll(".{1,"+n+"}( |$)","$0n")
Try it online!
Using a curried lamdba, it creates a regex to greedily match up to n
characters followed by either a space or end of string. It then replaces those characters with themselves followed by a newline.
Java (JDK), 46 44 bytes
Basically a pure regex solution in Java, almost certainly the shortest I've written.
Cheers to Kevin for helping to cut down the bytes in the regex even further!
n->s->s.replaceAll(".{1,"+n+"}( |$)","$0n")
Try it online!
Using a curried lamdba, it creates a regex to greedily match up to n
characters followed by either a space or end of string. It then replaces those characters with themselves followed by a newline.
edited 11 hours ago
answered 18 hours ago
Luke Stevens
734214
734214
@KevinCruijssen[ $]
actually just matches a space or$
if I remember correctly, rather than the end of string. It does seem to work though, so it looks like it can just be golfed down to a single space for even fewer bytes.
– Luke Stevens
17 hours ago
Ah, it can indeed be just a space, since you add newlines and don't need to add an additional trailing newline at the end.
– Kevin Cruijssen
17 hours ago
1
You can golf 2 more bytes removing the parenthesis in the regex, and use$0
instead of$1
.
– Kevin Cruijssen
17 hours ago
@KevinCruijssen Nice one! It's just a shame thatreplaceAll
is so verbose!
– Luke Stevens
17 hours ago
2
For me it is wrong, appear if I modify the Latin phrase of the exercise in the way it end with"...dictum varius a b c erat." There is a unnecessary new line after c letter...
– RosLuP
11 hours ago
|
show 1 more comment
@KevinCruijssen[ $]
actually just matches a space or$
if I remember correctly, rather than the end of string. It does seem to work though, so it looks like it can just be golfed down to a single space for even fewer bytes.
– Luke Stevens
17 hours ago
Ah, it can indeed be just a space, since you add newlines and don't need to add an additional trailing newline at the end.
– Kevin Cruijssen
17 hours ago
1
You can golf 2 more bytes removing the parenthesis in the regex, and use$0
instead of$1
.
– Kevin Cruijssen
17 hours ago
@KevinCruijssen Nice one! It's just a shame thatreplaceAll
is so verbose!
– Luke Stevens
17 hours ago
2
For me it is wrong, appear if I modify the Latin phrase of the exercise in the way it end with"...dictum varius a b c erat." There is a unnecessary new line after c letter...
– RosLuP
11 hours ago
@KevinCruijssen
[ $]
actually just matches a space or $
if I remember correctly, rather than the end of string. It does seem to work though, so it looks like it can just be golfed down to a single space for even fewer bytes.– Luke Stevens
17 hours ago
@KevinCruijssen
[ $]
actually just matches a space or $
if I remember correctly, rather than the end of string. It does seem to work though, so it looks like it can just be golfed down to a single space for even fewer bytes.– Luke Stevens
17 hours ago
Ah, it can indeed be just a space, since you add newlines and don't need to add an additional trailing newline at the end.
– Kevin Cruijssen
17 hours ago
Ah, it can indeed be just a space, since you add newlines and don't need to add an additional trailing newline at the end.
– Kevin Cruijssen
17 hours ago
1
1
You can golf 2 more bytes removing the parenthesis in the regex, and use
$0
instead of $1
.– Kevin Cruijssen
17 hours ago
You can golf 2 more bytes removing the parenthesis in the regex, and use
$0
instead of $1
.– Kevin Cruijssen
17 hours ago
@KevinCruijssen Nice one! It's just a shame that
replaceAll
is so verbose!– Luke Stevens
17 hours ago
@KevinCruijssen Nice one! It's just a shame that
replaceAll
is so verbose!– Luke Stevens
17 hours ago
2
2
For me it is wrong, appear if I modify the Latin phrase of the exercise in the way it end with"...dictum varius a b c erat." There is a unnecessary new line after c letter...
– RosLuP
11 hours ago
For me it is wrong, appear if I modify the Latin phrase of the exercise in the way it end with"...dictum varius a b c erat." There is a unnecessary new line after c letter...
– RosLuP
11 hours ago
|
show 1 more comment
up vote
2
down vote
C (gcc), 68 bytes
i;b(s,n,l)char*s,*l;{for(i=n;*++s;i--||(i=l-s+n,*l=10))l=*s-32?l:s;}
Try it online!
Thanks to ceilingcat, save 2 bytes by moving global char*l
to parameter.
1
Suggestb(s,n,l)char*s,*l;
instead ofchar*l;b(s,n)char*s;
– ceilingcat
11 hours ago
add a comment |
up vote
2
down vote
C (gcc), 68 bytes
i;b(s,n,l)char*s,*l;{for(i=n;*++s;i--||(i=l-s+n,*l=10))l=*s-32?l:s;}
Try it online!
Thanks to ceilingcat, save 2 bytes by moving global char*l
to parameter.
1
Suggestb(s,n,l)char*s,*l;
instead ofchar*l;b(s,n)char*s;
– ceilingcat
11 hours ago
add a comment |
up vote
2
down vote
up vote
2
down vote
C (gcc), 68 bytes
i;b(s,n,l)char*s,*l;{for(i=n;*++s;i--||(i=l-s+n,*l=10))l=*s-32?l:s;}
Try it online!
Thanks to ceilingcat, save 2 bytes by moving global char*l
to parameter.
C (gcc), 68 bytes
i;b(s,n,l)char*s,*l;{for(i=n;*++s;i--||(i=l-s+n,*l=10))l=*s-32?l:s;}
Try it online!
Thanks to ceilingcat, save 2 bytes by moving global char*l
to parameter.
edited 1 hour ago
answered 16 hours ago
tsh
8,12511446
8,12511446
1
Suggestb(s,n,l)char*s,*l;
instead ofchar*l;b(s,n)char*s;
– ceilingcat
11 hours ago
add a comment |
1
Suggestb(s,n,l)char*s,*l;
instead ofchar*l;b(s,n)char*s;
– ceilingcat
11 hours ago
1
1
Suggest
b(s,n,l)char*s,*l;
instead of char*l;b(s,n)char*s;
– ceilingcat
11 hours ago
Suggest
b(s,n,l)char*s,*l;
instead of char*l;b(s,n)char*s;
– ceilingcat
11 hours ago
add a comment |
up vote
1
down vote
Retina 0.8.2, 37 bytes
.+$
$*
!`(?=S.*¶(1)+)(?<-1>.)+(?=s)
Try it online! Takes s
and n
on separate lines. Explanation:
.+$
$*
Convert n
to unary.
(?=S.*¶(1)+)(?<-1>.)+(?=s)
Match non-whitespace, then look ahead to n
and count it as $#1
. Then go back and use a balancing group to match up to n
characters followed by whitespace.
!`
Output the matches as a list of lines.
Is there a way in Retina to put the first input in a regex we use with the second input? So something like this:.{1,50}
and$0¶
, but where50
is received as input instead?
– Kevin Cruijssen
17 hours ago
@KevinCruijssen In Retina 1 you can probably use an Eval stage to give a similar result, but that's boring, so I didn't bother.
– Neil
14 hours ago
add a comment |
up vote
1
down vote
Retina 0.8.2, 37 bytes
.+$
$*
!`(?=S.*¶(1)+)(?<-1>.)+(?=s)
Try it online! Takes s
and n
on separate lines. Explanation:
.+$
$*
Convert n
to unary.
(?=S.*¶(1)+)(?<-1>.)+(?=s)
Match non-whitespace, then look ahead to n
and count it as $#1
. Then go back and use a balancing group to match up to n
characters followed by whitespace.
!`
Output the matches as a list of lines.
Is there a way in Retina to put the first input in a regex we use with the second input? So something like this:.{1,50}
and$0¶
, but where50
is received as input instead?
– Kevin Cruijssen
17 hours ago
@KevinCruijssen In Retina 1 you can probably use an Eval stage to give a similar result, but that's boring, so I didn't bother.
– Neil
14 hours ago
add a comment |
up vote
1
down vote
up vote
1
down vote
Retina 0.8.2, 37 bytes
.+$
$*
!`(?=S.*¶(1)+)(?<-1>.)+(?=s)
Try it online! Takes s
and n
on separate lines. Explanation:
.+$
$*
Convert n
to unary.
(?=S.*¶(1)+)(?<-1>.)+(?=s)
Match non-whitespace, then look ahead to n
and count it as $#1
. Then go back and use a balancing group to match up to n
characters followed by whitespace.
!`
Output the matches as a list of lines.
Retina 0.8.2, 37 bytes
.+$
$*
!`(?=S.*¶(1)+)(?<-1>.)+(?=s)
Try it online! Takes s
and n
on separate lines. Explanation:
.+$
$*
Convert n
to unary.
(?=S.*¶(1)+)(?<-1>.)+(?=s)
Match non-whitespace, then look ahead to n
and count it as $#1
. Then go back and use a balancing group to match up to n
characters followed by whitespace.
!`
Output the matches as a list of lines.
answered Dec 1 at 12:42
Neil
78.5k744175
78.5k744175
Is there a way in Retina to put the first input in a regex we use with the second input? So something like this:.{1,50}
and$0¶
, but where50
is received as input instead?
– Kevin Cruijssen
17 hours ago
@KevinCruijssen In Retina 1 you can probably use an Eval stage to give a similar result, but that's boring, so I didn't bother.
– Neil
14 hours ago
add a comment |
Is there a way in Retina to put the first input in a regex we use with the second input? So something like this:.{1,50}
and$0¶
, but where50
is received as input instead?
– Kevin Cruijssen
17 hours ago
@KevinCruijssen In Retina 1 you can probably use an Eval stage to give a similar result, but that's boring, so I didn't bother.
– Neil
14 hours ago
Is there a way in Retina to put the first input in a regex we use with the second input? So something like this:
.{1,50}
and $0¶
, but where 50
is received as input instead?– Kevin Cruijssen
17 hours ago
Is there a way in Retina to put the first input in a regex we use with the second input? So something like this:
.{1,50}
and $0¶
, but where 50
is received as input instead?– Kevin Cruijssen
17 hours ago
@KevinCruijssen In Retina 1 you can probably use an Eval stage to give a similar result, but that's boring, so I didn't bother.
– Neil
14 hours ago
@KevinCruijssen In Retina 1 you can probably use an Eval stage to give a similar result, but that's boring, so I didn't bother.
– Neil
14 hours ago
add a comment |
up vote
1
down vote
Charcoal, 19 bytes
Nθ←F⪪S «¿‹⁺LιⅈθM→⸿ι
Try it online! Link is to verbose version of code. Takes input of n
and s
on separate lines. Explanation:
Nθ
Input n
.
←
Move the cursor left one square to balance the right movement from the first iteration of the loop.
F⪪S «
Split the string on spaces and loop over the words.
¿‹⁺Lιⅈθ
Calculate whether the next word will reach the right edge.
M→
If it will not then move one square right.
⸿
If it will then start a new line.
ι
Output the word.
add a comment |
up vote
1
down vote
Charcoal, 19 bytes
Nθ←F⪪S «¿‹⁺LιⅈθM→⸿ι
Try it online! Link is to verbose version of code. Takes input of n
and s
on separate lines. Explanation:
Nθ
Input n
.
←
Move the cursor left one square to balance the right movement from the first iteration of the loop.
F⪪S «
Split the string on spaces and loop over the words.
¿‹⁺Lιⅈθ
Calculate whether the next word will reach the right edge.
M→
If it will not then move one square right.
⸿
If it will then start a new line.
ι
Output the word.
add a comment |
up vote
1
down vote
up vote
1
down vote
Charcoal, 19 bytes
Nθ←F⪪S «¿‹⁺LιⅈθM→⸿ι
Try it online! Link is to verbose version of code. Takes input of n
and s
on separate lines. Explanation:
Nθ
Input n
.
←
Move the cursor left one square to balance the right movement from the first iteration of the loop.
F⪪S «
Split the string on spaces and loop over the words.
¿‹⁺Lιⅈθ
Calculate whether the next word will reach the right edge.
M→
If it will not then move one square right.
⸿
If it will then start a new line.
ι
Output the word.
Charcoal, 19 bytes
Nθ←F⪪S «¿‹⁺LιⅈθM→⸿ι
Try it online! Link is to verbose version of code. Takes input of n
and s
on separate lines. Explanation:
Nθ
Input n
.
←
Move the cursor left one square to balance the right movement from the first iteration of the loop.
F⪪S «
Split the string on spaces and loop over the words.
¿‹⁺Lιⅈθ
Calculate whether the next word will reach the right edge.
M→
If it will not then move one square right.
⸿
If it will then start a new line.
ι
Output the word.
answered Dec 1 at 12:51
Neil
78.5k744175
78.5k744175
add a comment |
add a comment |
up vote
1
down vote
Red, 125, 117, 114 112 bytes
func[s n][d: 0 parse s[any[to" "p:" "opt[[to" "| to end]q:(if(-1 - d + index? q)> n[p/1: #"^/"d: index? p])]]]s]
Try it online!
add a comment |
up vote
1
down vote
Red, 125, 117, 114 112 bytes
func[s n][d: 0 parse s[any[to" "p:" "opt[[to" "| to end]q:(if(-1 - d + index? q)> n[p/1: #"^/"d: index? p])]]]s]
Try it online!
add a comment |
up vote
1
down vote
up vote
1
down vote
Red, 125, 117, 114 112 bytes
func[s n][d: 0 parse s[any[to" "p:" "opt[[to" "| to end]q:(if(-1 - d + index? q)> n[p/1: #"^/"d: index? p])]]]s]
Try it online!
Red, 125, 117, 114 112 bytes
func[s n][d: 0 parse s[any[to" "p:" "opt[[to" "| to end]q:(if(-1 - d + index? q)> n[p/1: #"^/"d: index? p])]]]s]
Try it online!
edited Dec 2 at 7:42
answered Dec 1 at 10:16
Galen Ivanov
6,01211032
6,01211032
add a comment |
add a comment |
up vote
1
down vote
Powershell, 40 83 bytes
Test case with n=80
added.
param($s,$n)$s-split' '|%{if(($o+$_|% le*)-lt$n){$o+=' '*!!$o+$_}else{$o;$o=$_}}
$o
Test script:
$f = {
param($s,$n)$s-split' '|%{if(($o+$_|% le*)-lt$n){$o+=' '*!!$o+$_}else{$o;$o=$_}}
$o
}
@(
,(50, "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.",
"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.")
,(80, "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.",
"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,$s,$expected = $_
$result = &$f $s $n
"$result"-eq"$expected"
# $result # uncomment this line to dispaly a result
}
Output:
True
True
add a comment |
up vote
1
down vote
Powershell, 40 83 bytes
Test case with n=80
added.
param($s,$n)$s-split' '|%{if(($o+$_|% le*)-lt$n){$o+=' '*!!$o+$_}else{$o;$o=$_}}
$o
Test script:
$f = {
param($s,$n)$s-split' '|%{if(($o+$_|% le*)-lt$n){$o+=' '*!!$o+$_}else{$o;$o=$_}}
$o
}
@(
,(50, "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.",
"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.")
,(80, "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.",
"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,$s,$expected = $_
$result = &$f $s $n
"$result"-eq"$expected"
# $result # uncomment this line to dispaly a result
}
Output:
True
True
add a comment |
up vote
1
down vote
up vote
1
down vote
Powershell, 40 83 bytes
Test case with n=80
added.
param($s,$n)$s-split' '|%{if(($o+$_|% le*)-lt$n){$o+=' '*!!$o+$_}else{$o;$o=$_}}
$o
Test script:
$f = {
param($s,$n)$s-split' '|%{if(($o+$_|% le*)-lt$n){$o+=' '*!!$o+$_}else{$o;$o=$_}}
$o
}
@(
,(50, "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.",
"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.")
,(80, "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.",
"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,$s,$expected = $_
$result = &$f $s $n
"$result"-eq"$expected"
# $result # uncomment this line to dispaly a result
}
Output:
True
True
Powershell, 40 83 bytes
Test case with n=80
added.
param($s,$n)$s-split' '|%{if(($o+$_|% le*)-lt$n){$o+=' '*!!$o+$_}else{$o;$o=$_}}
$o
Test script:
$f = {
param($s,$n)$s-split' '|%{if(($o+$_|% le*)-lt$n){$o+=' '*!!$o+$_}else{$o;$o=$_}}
$o
}
@(
,(50, "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.",
"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.")
,(80, "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.",
"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,$s,$expected = $_
$result = &$f $s $n
"$result"-eq"$expected"
# $result # uncomment this line to dispaly a result
}
Output:
True
True
edited 2 days ago
answered Dec 2 at 16:33
mazzy
1,867313
1,867313
add a comment |
add a comment |
up vote
1
down vote
Java 8, 135 bytes
n->s->{String r="",S=s.split(" "),t=r;for(int i=0;i<S.length;)if((t+S[i]).length()>n){r+=t+"n";t="";}else t+=S[i++]+" ";return r+t;}
Try it online.
Explanation:
n->s->{ // Method with integer & String parameters and String return
String r="", // Result-String, starting empty
S=s.split(" "), // Input-String split by spaces
t=r; // Temp-String, starting empty as well
for(int i=0;i<S.length;) // Loop `i` in the range [0, amount_of_words):
if((t+S[i]).length()>n){ // If `t` and the word are larger than the integer input:
r+=t+"n"; // Add `t` and a newline to the result
t="";} // And reset `t` to an empty String
else // Else:
t+=S[i++]+" "; // Append the word and a space to `t`
// (and then increase `i` by 1 with `i++` for the next word
// of the next iteration)
return r+t;} // Return the result-String appended with `t` as result
add a comment |
up vote
1
down vote
Java 8, 135 bytes
n->s->{String r="",S=s.split(" "),t=r;for(int i=0;i<S.length;)if((t+S[i]).length()>n){r+=t+"n";t="";}else t+=S[i++]+" ";return r+t;}
Try it online.
Explanation:
n->s->{ // Method with integer & String parameters and String return
String r="", // Result-String, starting empty
S=s.split(" "), // Input-String split by spaces
t=r; // Temp-String, starting empty as well
for(int i=0;i<S.length;) // Loop `i` in the range [0, amount_of_words):
if((t+S[i]).length()>n){ // If `t` and the word are larger than the integer input:
r+=t+"n"; // Add `t` and a newline to the result
t="";} // And reset `t` to an empty String
else // Else:
t+=S[i++]+" "; // Append the word and a space to `t`
// (and then increase `i` by 1 with `i++` for the next word
// of the next iteration)
return r+t;} // Return the result-String appended with `t` as result
add a comment |
up vote
1
down vote
up vote
1
down vote
Java 8, 135 bytes
n->s->{String r="",S=s.split(" "),t=r;for(int i=0;i<S.length;)if((t+S[i]).length()>n){r+=t+"n";t="";}else t+=S[i++]+" ";return r+t;}
Try it online.
Explanation:
n->s->{ // Method with integer & String parameters and String return
String r="", // Result-String, starting empty
S=s.split(" "), // Input-String split by spaces
t=r; // Temp-String, starting empty as well
for(int i=0;i<S.length;) // Loop `i` in the range [0, amount_of_words):
if((t+S[i]).length()>n){ // If `t` and the word are larger than the integer input:
r+=t+"n"; // Add `t` and a newline to the result
t="";} // And reset `t` to an empty String
else // Else:
t+=S[i++]+" "; // Append the word and a space to `t`
// (and then increase `i` by 1 with `i++` for the next word
// of the next iteration)
return r+t;} // Return the result-String appended with `t` as result
Java 8, 135 bytes
n->s->{String r="",S=s.split(" "),t=r;for(int i=0;i<S.length;)if((t+S[i]).length()>n){r+=t+"n";t="";}else t+=S[i++]+" ";return r+t;}
Try it online.
Explanation:
n->s->{ // Method with integer & String parameters and String return
String r="", // Result-String, starting empty
S=s.split(" "), // Input-String split by spaces
t=r; // Temp-String, starting empty as well
for(int i=0;i<S.length;) // Loop `i` in the range [0, amount_of_words):
if((t+S[i]).length()>n){ // If `t` and the word are larger than the integer input:
r+=t+"n"; // Add `t` and a newline to the result
t="";} // And reset `t` to an empty String
else // Else:
t+=S[i++]+" "; // Append the word and a space to `t`
// (and then increase `i` by 1 with `i++` for the next word
// of the next iteration)
return r+t;} // Return the result-String appended with `t` as result
answered 2 days ago
Kevin Cruijssen
34.9k554184
34.9k554184
add a comment |
add a comment |
up vote
1
down vote
Japt, 24 bytes
¸r@[XY]q(X·Ì+S+Y Ê>V?R:S
Try it online!
Thanks to Bubbler for removing some duplication.
Explanation:
¸ :Split into words
r@ :Reduce back into a string by:
X : Start with the already reduced portion
·Ì : Get the last line
+S+Y : Add a space and the next word
Ê>V? : If the length of that line is greater than n:
R : Choose newline
: : Otherwise:
S : Choose space
[XY]q( : Join the next word to the result using the chosen character
24 bytes with[X,Y].join(...)
.
– Bubbler
2 days ago
add a comment |
up vote
1
down vote
Japt, 24 bytes
¸r@[XY]q(X·Ì+S+Y Ê>V?R:S
Try it online!
Thanks to Bubbler for removing some duplication.
Explanation:
¸ :Split into words
r@ :Reduce back into a string by:
X : Start with the already reduced portion
·Ì : Get the last line
+S+Y : Add a space and the next word
Ê>V? : If the length of that line is greater than n:
R : Choose newline
: : Otherwise:
S : Choose space
[XY]q( : Join the next word to the result using the chosen character
24 bytes with[X,Y].join(...)
.
– Bubbler
2 days ago
add a comment |
up vote
1
down vote
up vote
1
down vote
Japt, 24 bytes
¸r@[XY]q(X·Ì+S+Y Ê>V?R:S
Try it online!
Thanks to Bubbler for removing some duplication.
Explanation:
¸ :Split into words
r@ :Reduce back into a string by:
X : Start with the already reduced portion
·Ì : Get the last line
+S+Y : Add a space and the next word
Ê>V? : If the length of that line is greater than n:
R : Choose newline
: : Otherwise:
S : Choose space
[XY]q( : Join the next word to the result using the chosen character
Japt, 24 bytes
¸r@[XY]q(X·Ì+S+Y Ê>V?R:S
Try it online!
Thanks to Bubbler for removing some duplication.
Explanation:
¸ :Split into words
r@ :Reduce back into a string by:
X : Start with the already reduced portion
·Ì : Get the last line
+S+Y : Add a space and the next word
Ê>V? : If the length of that line is greater than n:
R : Choose newline
: : Otherwise:
S : Choose space
[XY]q( : Join the next word to the result using the chosen character
edited 2 days ago
answered Dec 2 at 4:33
Kamil Drakari
2,676416
2,676416
24 bytes with[X,Y].join(...)
.
– Bubbler
2 days ago
add a comment |
24 bytes with[X,Y].join(...)
.
– Bubbler
2 days ago
24 bytes with
[X,Y].join(...)
.– Bubbler
2 days ago
24 bytes with
[X,Y].join(...)
.– Bubbler
2 days ago
add a comment |
up vote
1
down vote
JavaScript, 40 bytes
s=>n=>eval(`s.match(/.{1,${n}}( |$)/g)`)
Try it online!
Fail at the end
– l4m2
2 days ago
@l4m2 fixed....
– tsh
2 days ago
add a comment |
up vote
1
down vote
JavaScript, 40 bytes
s=>n=>eval(`s.match(/.{1,${n}}( |$)/g)`)
Try it online!
Fail at the end
– l4m2
2 days ago
@l4m2 fixed....
– tsh
2 days ago
add a comment |
up vote
1
down vote
up vote
1
down vote
JavaScript, 40 bytes
s=>n=>eval(`s.match(/.{1,${n}}( |$)/g)`)
Try it online!
JavaScript, 40 bytes
s=>n=>eval(`s.match(/.{1,${n}}( |$)/g)`)
Try it online!
edited 1 hour ago
answered Dec 3 at 4:10
tsh
8,12511446
8,12511446
Fail at the end
– l4m2
2 days ago
@l4m2 fixed....
– tsh
2 days ago
add a comment |
Fail at the end
– l4m2
2 days ago
@l4m2 fixed....
– tsh
2 days ago
Fail at the end
– l4m2
2 days ago
Fail at the end
– l4m2
2 days ago
@l4m2 fixed....
– tsh
2 days ago
@l4m2 fixed....
– tsh
2 days ago
add a comment |
up vote
0
down vote
Thanks to @Erik the Outgolfer, a golfed version :
Python 3, 94 bytes
def f(t,n):
while t:i=n+(t[min(len(t)-1,n)]==" "or-t[n-1::-1].find(' '));print(t[:i]);t=t[i:]
Try it online!
# Python 3, 130 bytes
def f(t,n):
l=
while len(t):
i=(n-t[:n][::-1].find(' '),n+1)[t[min(len(t)-1,n)]==" "]
l.append(t[:i])
t=t[i::]
return l
Try it online!
Not so golfed version...
1
Some golfs. (prints to STDOUT, doesn't return).
– Erik the Outgolfer
Dec 1 at 18:31
add a comment |
up vote
0
down vote
Thanks to @Erik the Outgolfer, a golfed version :
Python 3, 94 bytes
def f(t,n):
while t:i=n+(t[min(len(t)-1,n)]==" "or-t[n-1::-1].find(' '));print(t[:i]);t=t[i:]
Try it online!
# Python 3, 130 bytes
def f(t,n):
l=
while len(t):
i=(n-t[:n][::-1].find(' '),n+1)[t[min(len(t)-1,n)]==" "]
l.append(t[:i])
t=t[i::]
return l
Try it online!
Not so golfed version...
1
Some golfs. (prints to STDOUT, doesn't return).
– Erik the Outgolfer
Dec 1 at 18:31
add a comment |
up vote
0
down vote
up vote
0
down vote
Thanks to @Erik the Outgolfer, a golfed version :
Python 3, 94 bytes
def f(t,n):
while t:i=n+(t[min(len(t)-1,n)]==" "or-t[n-1::-1].find(' '));print(t[:i]);t=t[i:]
Try it online!
# Python 3, 130 bytes
def f(t,n):
l=
while len(t):
i=(n-t[:n][::-1].find(' '),n+1)[t[min(len(t)-1,n)]==" "]
l.append(t[:i])
t=t[i::]
return l
Try it online!
Not so golfed version...
Thanks to @Erik the Outgolfer, a golfed version :
Python 3, 94 bytes
def f(t,n):
while t:i=n+(t[min(len(t)-1,n)]==" "or-t[n-1::-1].find(' '));print(t[:i]);t=t[i:]
Try it online!
# Python 3, 130 bytes
def f(t,n):
l=
while len(t):
i=(n-t[:n][::-1].find(' '),n+1)[t[min(len(t)-1,n)]==" "]
l.append(t[:i])
t=t[i::]
return l
Try it online!
Not so golfed version...
edited Dec 1 at 18:37
answered Dec 1 at 17:37
david
6417
6417
1
Some golfs. (prints to STDOUT, doesn't return).
– Erik the Outgolfer
Dec 1 at 18:31
add a comment |
1
Some golfs. (prints to STDOUT, doesn't return).
– Erik the Outgolfer
Dec 1 at 18:31
1
1
Some golfs. (prints to STDOUT, doesn't return).
– Erik the Outgolfer
Dec 1 at 18:31
Some golfs. (prints to STDOUT, doesn't return).
– Erik the Outgolfer
Dec 1 at 18:31
add a comment |
up vote
0
down vote
JavaScript + HTML + CSS, 117 64 bytes
-53 bytes courtesy of @Neil
n=50
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."
f=(n,s)=>document.body.innerHTML+=`<tt><p style=width:${n}ch>${s}`
f(n,s)
1
At least in my browser you can cut this down to(n,s)=>document.body.innerHTML+=`<p style=width:${n}ch><tt>${s}</tt></p>`
for 74 bytes. If you're willing to dig out old versions of Firefox you can save another 8 bytes with(n,s)=>document.body.innerHTML+=`<pre wrap width=${n}>${s}</pre>`
.
– Neil
Dec 1 at 12:33
@Neil Nice use ofch
units. Firefox 65 computes50ch
as500px
; Chromium 70 computes50ch
as400px
– guest271314
Dec 1 at 18:28
This answer is wrong.elit. Sed eget erat lectus. Morbi mi mi, fringilla sed
(2nd line) is more than 50 characters. I'm using the newest Chrome.
– mbomb007
Dec 1 at 19:59
I was able to tweak my original suggestion to work in Chrome by putting the<p>
inside the<tt>
.
– Neil
Dec 1 at 20:16
1
next.plnkr.co/edit/fT2moRe5qgsxj48p?open=lib%2Fscript.js
– Neil
Dec 1 at 20:29
|
show 1 more comment
up vote
0
down vote
JavaScript + HTML + CSS, 117 64 bytes
-53 bytes courtesy of @Neil
n=50
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."
f=(n,s)=>document.body.innerHTML+=`<tt><p style=width:${n}ch>${s}`
f(n,s)
1
At least in my browser you can cut this down to(n,s)=>document.body.innerHTML+=`<p style=width:${n}ch><tt>${s}</tt></p>`
for 74 bytes. If you're willing to dig out old versions of Firefox you can save another 8 bytes with(n,s)=>document.body.innerHTML+=`<pre wrap width=${n}>${s}</pre>`
.
– Neil
Dec 1 at 12:33
@Neil Nice use ofch
units. Firefox 65 computes50ch
as500px
; Chromium 70 computes50ch
as400px
– guest271314
Dec 1 at 18:28
This answer is wrong.elit. Sed eget erat lectus. Morbi mi mi, fringilla sed
(2nd line) is more than 50 characters. I'm using the newest Chrome.
– mbomb007
Dec 1 at 19:59
I was able to tweak my original suggestion to work in Chrome by putting the<p>
inside the<tt>
.
– Neil
Dec 1 at 20:16
1
next.plnkr.co/edit/fT2moRe5qgsxj48p?open=lib%2Fscript.js
– Neil
Dec 1 at 20:29
|
show 1 more comment
up vote
0
down vote
up vote
0
down vote
JavaScript + HTML + CSS, 117 64 bytes
-53 bytes courtesy of @Neil
n=50
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."
f=(n,s)=>document.body.innerHTML+=`<tt><p style=width:${n}ch>${s}`
f(n,s)
JavaScript + HTML + CSS, 117 64 bytes
-53 bytes courtesy of @Neil
n=50
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."
f=(n,s)=>document.body.innerHTML+=`<tt><p style=width:${n}ch>${s}`
f(n,s)
n=50
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."
f=(n,s)=>document.body.innerHTML+=`<tt><p style=width:${n}ch>${s}`
f(n,s)
n=50
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."
f=(n,s)=>document.body.innerHTML+=`<tt><p style=width:${n}ch>${s}`
f(n,s)
edited Dec 1 at 20:57
answered Dec 1 at 2:17
guest271314
317211
317211
1
At least in my browser you can cut this down to(n,s)=>document.body.innerHTML+=`<p style=width:${n}ch><tt>${s}</tt></p>`
for 74 bytes. If you're willing to dig out old versions of Firefox you can save another 8 bytes with(n,s)=>document.body.innerHTML+=`<pre wrap width=${n}>${s}</pre>`
.
– Neil
Dec 1 at 12:33
@Neil Nice use ofch
units. Firefox 65 computes50ch
as500px
; Chromium 70 computes50ch
as400px
– guest271314
Dec 1 at 18:28
This answer is wrong.elit. Sed eget erat lectus. Morbi mi mi, fringilla sed
(2nd line) is more than 50 characters. I'm using the newest Chrome.
– mbomb007
Dec 1 at 19:59
I was able to tweak my original suggestion to work in Chrome by putting the<p>
inside the<tt>
.
– Neil
Dec 1 at 20:16
1
next.plnkr.co/edit/fT2moRe5qgsxj48p?open=lib%2Fscript.js
– Neil
Dec 1 at 20:29
|
show 1 more comment
1
At least in my browser you can cut this down to(n,s)=>document.body.innerHTML+=`<p style=width:${n}ch><tt>${s}</tt></p>`
for 74 bytes. If you're willing to dig out old versions of Firefox you can save another 8 bytes with(n,s)=>document.body.innerHTML+=`<pre wrap width=${n}>${s}</pre>`
.
– Neil
Dec 1 at 12:33
@Neil Nice use ofch
units. Firefox 65 computes50ch
as500px
; Chromium 70 computes50ch
as400px
– guest271314
Dec 1 at 18:28
This answer is wrong.elit. Sed eget erat lectus. Morbi mi mi, fringilla sed
(2nd line) is more than 50 characters. I'm using the newest Chrome.
– mbomb007
Dec 1 at 19:59
I was able to tweak my original suggestion to work in Chrome by putting the<p>
inside the<tt>
.
– Neil
Dec 1 at 20:16
1
next.plnkr.co/edit/fT2moRe5qgsxj48p?open=lib%2Fscript.js
– Neil
Dec 1 at 20:29
1
1
At least in my browser you can cut this down to
(n,s)=>document.body.innerHTML+=`<p style=width:${n}ch><tt>${s}</tt></p>`
for 74 bytes. If you're willing to dig out old versions of Firefox you can save another 8 bytes with (n,s)=>document.body.innerHTML+=`<pre wrap width=${n}>${s}</pre>`
.– Neil
Dec 1 at 12:33
At least in my browser you can cut this down to
(n,s)=>document.body.innerHTML+=`<p style=width:${n}ch><tt>${s}</tt></p>`
for 74 bytes. If you're willing to dig out old versions of Firefox you can save another 8 bytes with (n,s)=>document.body.innerHTML+=`<pre wrap width=${n}>${s}</pre>`
.– Neil
Dec 1 at 12:33
@Neil Nice use of
ch
units. Firefox 65 computes 50ch
as 500px
; Chromium 70 computes 50ch
as 400px
– guest271314
Dec 1 at 18:28
@Neil Nice use of
ch
units. Firefox 65 computes 50ch
as 500px
; Chromium 70 computes 50ch
as 400px
– guest271314
Dec 1 at 18:28
This answer is wrong.
elit. Sed eget erat lectus. Morbi mi mi, fringilla sed
(2nd line) is more than 50 characters. I'm using the newest Chrome.– mbomb007
Dec 1 at 19:59
This answer is wrong.
elit. Sed eget erat lectus. Morbi mi mi, fringilla sed
(2nd line) is more than 50 characters. I'm using the newest Chrome.– mbomb007
Dec 1 at 19:59
I was able to tweak my original suggestion to work in Chrome by putting the
<p>
inside the <tt>
.– Neil
Dec 1 at 20:16
I was able to tweak my original suggestion to work in Chrome by putting the
<p>
inside the <tt>
.– Neil
Dec 1 at 20:16
1
1
next.plnkr.co/edit/fT2moRe5qgsxj48p?open=lib%2Fscript.js
– Neil
Dec 1 at 20:29
next.plnkr.co/edit/fT2moRe5qgsxj48p?open=lib%2Fscript.js
– Neil
Dec 1 at 20:29
|
show 1 more comment
up vote
0
down vote
C# (Visual C# Interactive Compiler), 91 bytes
s=>n=>s.Split(' ').Aggregate((a,w)=>a+(a.Length-a.LastIndexOf('n')+w.Length>n?'n':' ')+w)
Try it online!
add a comment |
up vote
0
down vote
C# (Visual C# Interactive Compiler), 91 bytes
s=>n=>s.Split(' ').Aggregate((a,w)=>a+(a.Length-a.LastIndexOf('n')+w.Length>n?'n':' ')+w)
Try it online!
add a comment |
up vote
0
down vote
up vote
0
down vote
C# (Visual C# Interactive Compiler), 91 bytes
s=>n=>s.Split(' ').Aggregate((a,w)=>a+(a.Length-a.LastIndexOf('n')+w.Length>n?'n':' ')+w)
Try it online!
C# (Visual C# Interactive Compiler), 91 bytes
s=>n=>s.Split(' ').Aggregate((a,w)=>a+(a.Length-a.LastIndexOf('n')+w.Length>n?'n':' ')+w)
Try it online!
answered Dec 1 at 23:46
dana
25114
25114
add a comment |
add a comment |
up vote
0
down vote
Jelly, 12 bytes
ḲŒṖK€€ḣ€ƑƇṪY
Try it online!
Unfortunately, this is too slow to work for the provided test case in under a minute over TIO.
add a comment |
up vote
0
down vote
Jelly, 12 bytes
ḲŒṖK€€ḣ€ƑƇṪY
Try it online!
Unfortunately, this is too slow to work for the provided test case in under a minute over TIO.
add a comment |
up vote
0
down vote
up vote
0
down vote
Jelly, 12 bytes
ḲŒṖK€€ḣ€ƑƇṪY
Try it online!
Unfortunately, this is too slow to work for the provided test case in under a minute over TIO.
Jelly, 12 bytes
ḲŒṖK€€ḣ€ƑƇṪY
Try it online!
Unfortunately, this is too slow to work for the provided test case in under a minute over TIO.
answered Dec 2 at 20:43
Erik the Outgolfer
31k429102
31k429102
add a comment |
add a comment |
up vote
0
down vote
C# (.NET Core), 162 bytes
stringt(string n,int a){var g="";for(int i=0;i++<Math.Floor((double)n.Length/a);)g+=$"^.{{{i*a-1}}}|";return Regex.Split(n,$@"(?n)(?<=({g.Trim('|')})S*)s");}}
This function uses a regex which matches the closest whitespace that is near the nth or multiple of nth character and splits the string based on it.
Try it online!
The TIO link is a full program, and the function has a static keyword so the function can be called from main.
Test Regex
This doesn't give the right output for the test case - some lines are longer than 50 characters. You want "before" not "near", and also the splitting at one point must depend on where it was split earlier.
– Ørjan Johansen
2 days ago
add a comment |
up vote
0
down vote
C# (.NET Core), 162 bytes
stringt(string n,int a){var g="";for(int i=0;i++<Math.Floor((double)n.Length/a);)g+=$"^.{{{i*a-1}}}|";return Regex.Split(n,$@"(?n)(?<=({g.Trim('|')})S*)s");}}
This function uses a regex which matches the closest whitespace that is near the nth or multiple of nth character and splits the string based on it.
Try it online!
The TIO link is a full program, and the function has a static keyword so the function can be called from main.
Test Regex
This doesn't give the right output for the test case - some lines are longer than 50 characters. You want "before" not "near", and also the splitting at one point must depend on where it was split earlier.
– Ørjan Johansen
2 days ago
add a comment |
up vote
0
down vote
up vote
0
down vote
C# (.NET Core), 162 bytes
stringt(string n,int a){var g="";for(int i=0;i++<Math.Floor((double)n.Length/a);)g+=$"^.{{{i*a-1}}}|";return Regex.Split(n,$@"(?n)(?<=({g.Trim('|')})S*)s");}}
This function uses a regex which matches the closest whitespace that is near the nth or multiple of nth character and splits the string based on it.
Try it online!
The TIO link is a full program, and the function has a static keyword so the function can be called from main.
Test Regex
C# (.NET Core), 162 bytes
stringt(string n,int a){var g="";for(int i=0;i++<Math.Floor((double)n.Length/a);)g+=$"^.{{{i*a-1}}}|";return Regex.Split(n,$@"(?n)(?<=({g.Trim('|')})S*)s");}}
This function uses a regex which matches the closest whitespace that is near the nth or multiple of nth character and splits the string based on it.
Try it online!
The TIO link is a full program, and the function has a static keyword so the function can be called from main.
Test Regex
edited Dec 2 at 23:41
answered Dec 2 at 22:32
Embodiment of Ignorance
1557
1557
This doesn't give the right output for the test case - some lines are longer than 50 characters. You want "before" not "near", and also the splitting at one point must depend on where it was split earlier.
– Ørjan Johansen
2 days ago
add a comment |
This doesn't give the right output for the test case - some lines are longer than 50 characters. You want "before" not "near", and also the splitting at one point must depend on where it was split earlier.
– Ørjan Johansen
2 days ago
This doesn't give the right output for the test case - some lines are longer than 50 characters. You want "before" not "near", and also the splitting at one point must depend on where it was split earlier.
– Ørjan Johansen
2 days ago
This doesn't give the right output for the test case - some lines are longer than 50 characters. You want "before" not "near", and also the splitting at one point must depend on where it was split earlier.
– Ørjan Johansen
2 days ago
add a comment |
up vote
0
down vote
05AB1E, 18 bytes
õs#vDy«g²›i,}yðJ}?
Try it online.
Explanation:
õ # Push an empty string "" to the stack
s # Swap to take the (implicit) string input
# # Split it by spaces
v } # For-each `y` over the words:
D # Duplicate the top of the stack
# (which is the empty string in the very first iteration)
y« # Append the current word `y`
g # Get its length
²›i } # If its lengthy is larger than the second input:
, # Pop and output the current duplicated value with trailing newline
yð # Push the word `y` and a space " "
J # Join the entire stack together
? # After the loop, output the last part as well (without newline)
add a comment |
up vote
0
down vote
05AB1E, 18 bytes
õs#vDy«g²›i,}yðJ}?
Try it online.
Explanation:
õ # Push an empty string "" to the stack
s # Swap to take the (implicit) string input
# # Split it by spaces
v } # For-each `y` over the words:
D # Duplicate the top of the stack
# (which is the empty string in the very first iteration)
y« # Append the current word `y`
g # Get its length
²›i } # If its lengthy is larger than the second input:
, # Pop and output the current duplicated value with trailing newline
yð # Push the word `y` and a space " "
J # Join the entire stack together
? # After the loop, output the last part as well (without newline)
add a comment |
up vote
0
down vote
up vote
0
down vote
05AB1E, 18 bytes
õs#vDy«g²›i,}yðJ}?
Try it online.
Explanation:
õ # Push an empty string "" to the stack
s # Swap to take the (implicit) string input
# # Split it by spaces
v } # For-each `y` over the words:
D # Duplicate the top of the stack
# (which is the empty string in the very first iteration)
y« # Append the current word `y`
g # Get its length
²›i } # If its lengthy is larger than the second input:
, # Pop and output the current duplicated value with trailing newline
yð # Push the word `y` and a space " "
J # Join the entire stack together
? # After the loop, output the last part as well (without newline)
05AB1E, 18 bytes
õs#vDy«g²›i,}yðJ}?
Try it online.
Explanation:
õ # Push an empty string "" to the stack
s # Swap to take the (implicit) string input
# # Split it by spaces
v } # For-each `y` over the words:
D # Duplicate the top of the stack
# (which is the empty string in the very first iteration)
y« # Append the current word `y`
g # Get its length
²›i } # If its lengthy is larger than the second input:
, # Pop and output the current duplicated value with trailing newline
yð # Push the word `y` and a space " "
J # Join the entire stack together
? # After the loop, output the last part as well (without newline)
answered 2 days ago
Kevin Cruijssen
34.9k554184
34.9k554184
add a comment |
add a comment |
up vote
0
down vote
C, 251 bytes
#define U unsigned
#define R(x,y) if(x)return y
U b(char*a,U n){U c,q,r=1,i,j,w;R(!a||n<1||n++>0xFFFFFFF,-1);for(w=j=c=i=0;;++i,++c){R(i==-1,-1);q=a[i];if(q==10)goto l;if(c>=n){j?(a[j]=10):0;i=i-j<n?j:(w=1);l:c=-1;++r;}R(!q||w,w?-1:r);if(q==32)j=i;}}
The function of this exercise b(a,n) breaks the line "a" as exercise said,
in the way not change its lengh (if we see the result as one string) because change some spaces in n or new line.
If find one error it return -1, else it return the number of line of that result in 'a' (as input).
test result and code indented
Lorem ipsum dolor sit amet, consectetur adipiscing [50]
elit. Sed eget erat lectus. Morbi mi mi, fringilla [50]
sed suscipit ullamcorper, tristique at mauris. [46]
Morbi non commodo nibh. Pellentesque habitant [45]
morbi tristique senectus et netus et malesuada [46]
fames ac turpis egestas. Sed at iaculis mauris. [47]
Praesent a sem augue. Nulla lectus sapien, auctor [49]
nec pharetra eu, tincidunt ac diam. Sed ligula [46]
arcu, aliquam quis velit aliquam, dictum varius [47]
erat. [5]
#define U unsigned
#define R(x,y) if(x)return y
#define G goto
U RompiLinea(char*a,U n)
{U c,q,r=1,i,j,w;
R(!a||n<1||n++>0xFFFFFFF,-1);
for(w=j=c=i=0;;++i,++c)
{R(i==-1,-1);q=a[i];
if(q==10)G l;
if(c>=n){j?(a[j]=10):0;i=i-j<n?j:(w=1);l:c=-1;++r;}
R(!q||w,w?-1:r);
if(q==32)j=i;
}
}
1
147 bytes
– ceilingcat
yesterday
@ceilingcat ok, above code would make in consideration the n too... one bug I found with the code was that the last line was not correctly print... why do you not write your C answer as other? It would win on mine because it is more short... for say the true I use the first line(or statement ";") for the check of input only because for me input has to be checked even if that is a little more long; I unsuccessful try to write the function in APL...
– RosLuP
17 hours ago
add a comment |
up vote
0
down vote
C, 251 bytes
#define U unsigned
#define R(x,y) if(x)return y
U b(char*a,U n){U c,q,r=1,i,j,w;R(!a||n<1||n++>0xFFFFFFF,-1);for(w=j=c=i=0;;++i,++c){R(i==-1,-1);q=a[i];if(q==10)goto l;if(c>=n){j?(a[j]=10):0;i=i-j<n?j:(w=1);l:c=-1;++r;}R(!q||w,w?-1:r);if(q==32)j=i;}}
The function of this exercise b(a,n) breaks the line "a" as exercise said,
in the way not change its lengh (if we see the result as one string) because change some spaces in n or new line.
If find one error it return -1, else it return the number of line of that result in 'a' (as input).
test result and code indented
Lorem ipsum dolor sit amet, consectetur adipiscing [50]
elit. Sed eget erat lectus. Morbi mi mi, fringilla [50]
sed suscipit ullamcorper, tristique at mauris. [46]
Morbi non commodo nibh. Pellentesque habitant [45]
morbi tristique senectus et netus et malesuada [46]
fames ac turpis egestas. Sed at iaculis mauris. [47]
Praesent a sem augue. Nulla lectus sapien, auctor [49]
nec pharetra eu, tincidunt ac diam. Sed ligula [46]
arcu, aliquam quis velit aliquam, dictum varius [47]
erat. [5]
#define U unsigned
#define R(x,y) if(x)return y
#define G goto
U RompiLinea(char*a,U n)
{U c,q,r=1,i,j,w;
R(!a||n<1||n++>0xFFFFFFF,-1);
for(w=j=c=i=0;;++i,++c)
{R(i==-1,-1);q=a[i];
if(q==10)G l;
if(c>=n){j?(a[j]=10):0;i=i-j<n?j:(w=1);l:c=-1;++r;}
R(!q||w,w?-1:r);
if(q==32)j=i;
}
}
1
147 bytes
– ceilingcat
yesterday
@ceilingcat ok, above code would make in consideration the n too... one bug I found with the code was that the last line was not correctly print... why do you not write your C answer as other? It would win on mine because it is more short... for say the true I use the first line(or statement ";") for the check of input only because for me input has to be checked even if that is a little more long; I unsuccessful try to write the function in APL...
– RosLuP
17 hours ago
add a comment |
up vote
0
down vote
up vote
0
down vote
C, 251 bytes
#define U unsigned
#define R(x,y) if(x)return y
U b(char*a,U n){U c,q,r=1,i,j,w;R(!a||n<1||n++>0xFFFFFFF,-1);for(w=j=c=i=0;;++i,++c){R(i==-1,-1);q=a[i];if(q==10)goto l;if(c>=n){j?(a[j]=10):0;i=i-j<n?j:(w=1);l:c=-1;++r;}R(!q||w,w?-1:r);if(q==32)j=i;}}
The function of this exercise b(a,n) breaks the line "a" as exercise said,
in the way not change its lengh (if we see the result as one string) because change some spaces in n or new line.
If find one error it return -1, else it return the number of line of that result in 'a' (as input).
test result and code indented
Lorem ipsum dolor sit amet, consectetur adipiscing [50]
elit. Sed eget erat lectus. Morbi mi mi, fringilla [50]
sed suscipit ullamcorper, tristique at mauris. [46]
Morbi non commodo nibh. Pellentesque habitant [45]
morbi tristique senectus et netus et malesuada [46]
fames ac turpis egestas. Sed at iaculis mauris. [47]
Praesent a sem augue. Nulla lectus sapien, auctor [49]
nec pharetra eu, tincidunt ac diam. Sed ligula [46]
arcu, aliquam quis velit aliquam, dictum varius [47]
erat. [5]
#define U unsigned
#define R(x,y) if(x)return y
#define G goto
U RompiLinea(char*a,U n)
{U c,q,r=1,i,j,w;
R(!a||n<1||n++>0xFFFFFFF,-1);
for(w=j=c=i=0;;++i,++c)
{R(i==-1,-1);q=a[i];
if(q==10)G l;
if(c>=n){j?(a[j]=10):0;i=i-j<n?j:(w=1);l:c=-1;++r;}
R(!q||w,w?-1:r);
if(q==32)j=i;
}
}
C, 251 bytes
#define U unsigned
#define R(x,y) if(x)return y
U b(char*a,U n){U c,q,r=1,i,j,w;R(!a||n<1||n++>0xFFFFFFF,-1);for(w=j=c=i=0;;++i,++c){R(i==-1,-1);q=a[i];if(q==10)goto l;if(c>=n){j?(a[j]=10):0;i=i-j<n?j:(w=1);l:c=-1;++r;}R(!q||w,w?-1:r);if(q==32)j=i;}}
The function of this exercise b(a,n) breaks the line "a" as exercise said,
in the way not change its lengh (if we see the result as one string) because change some spaces in n or new line.
If find one error it return -1, else it return the number of line of that result in 'a' (as input).
test result and code indented
Lorem ipsum dolor sit amet, consectetur adipiscing [50]
elit. Sed eget erat lectus. Morbi mi mi, fringilla [50]
sed suscipit ullamcorper, tristique at mauris. [46]
Morbi non commodo nibh. Pellentesque habitant [45]
morbi tristique senectus et netus et malesuada [46]
fames ac turpis egestas. Sed at iaculis mauris. [47]
Praesent a sem augue. Nulla lectus sapien, auctor [49]
nec pharetra eu, tincidunt ac diam. Sed ligula [46]
arcu, aliquam quis velit aliquam, dictum varius [47]
erat. [5]
#define U unsigned
#define R(x,y) if(x)return y
#define G goto
U RompiLinea(char*a,U n)
{U c,q,r=1,i,j,w;
R(!a||n<1||n++>0xFFFFFFF,-1);
for(w=j=c=i=0;;++i,++c)
{R(i==-1,-1);q=a[i];
if(q==10)G l;
if(c>=n){j?(a[j]=10):0;i=i-j<n?j:(w=1);l:c=-1;++r;}
R(!q||w,w?-1:r);
if(q==32)j=i;
}
}
answered yesterday
RosLuP
1,758514
1,758514
1
147 bytes
– ceilingcat
yesterday
@ceilingcat ok, above code would make in consideration the n too... one bug I found with the code was that the last line was not correctly print... why do you not write your C answer as other? It would win on mine because it is more short... for say the true I use the first line(or statement ";") for the check of input only because for me input has to be checked even if that is a little more long; I unsuccessful try to write the function in APL...
– RosLuP
17 hours ago
add a comment |
1
147 bytes
– ceilingcat
yesterday
@ceilingcat ok, above code would make in consideration the n too... one bug I found with the code was that the last line was not correctly print... why do you not write your C answer as other? It would win on mine because it is more short... for say the true I use the first line(or statement ";") for the check of input only because for me input has to be checked even if that is a little more long; I unsuccessful try to write the function in APL...
– RosLuP
17 hours ago
1
1
147 bytes
– ceilingcat
yesterday
147 bytes
– ceilingcat
yesterday
@ceilingcat ok, above code would make in consideration the n too... one bug I found with the code was that the last line was not correctly print... why do you not write your C answer as other? It would win on mine because it is more short... for say the true I use the first line(or statement ";") for the check of input only because for me input has to be checked even if that is a little more long; I unsuccessful try to write the function in APL...
– RosLuP
17 hours ago
@ceilingcat ok, above code would make in consideration the n too... one bug I found with the code was that the last line was not correctly print... why do you not write your C answer as other? It would win on mine because it is more short... for say the true I use the first line(or statement ";") for the check of input only because for me input has to be checked even if that is a little more long; I unsuccessful try to write the function in APL...
– RosLuP
17 hours ago
add a comment |
up vote
-1
down vote
Bash/Coreutils, 8 bytes
fold -sw <n>
Try It Online!
The fold utility, that's bundled along with coreutils, does exactly what the question asks. The -s
flag makes it so that it only breaks on whitespaces(ie. when the word ends), the value of n is passed using the argument -w
. Input is accepted via stdin
Unfortunately, that doesn't work for the test case from the question, because fold counts a trailing space as one of the 50 bytes.
– Dennis♦
Dec 1 at 19:43
1
On a side note, only full programs and functions are allowed by default.fold -sw$1
(orfold -s$1
) would comply with that rule.
– Dennis♦
Dec 1 at 19:43
add a comment |
up vote
-1
down vote
Bash/Coreutils, 8 bytes
fold -sw <n>
Try It Online!
The fold utility, that's bundled along with coreutils, does exactly what the question asks. The -s
flag makes it so that it only breaks on whitespaces(ie. when the word ends), the value of n is passed using the argument -w
. Input is accepted via stdin
Unfortunately, that doesn't work for the test case from the question, because fold counts a trailing space as one of the 50 bytes.
– Dennis♦
Dec 1 at 19:43
1
On a side note, only full programs and functions are allowed by default.fold -sw$1
(orfold -s$1
) would comply with that rule.
– Dennis♦
Dec 1 at 19:43
add a comment |
up vote
-1
down vote
up vote
-1
down vote
Bash/Coreutils, 8 bytes
fold -sw <n>
Try It Online!
The fold utility, that's bundled along with coreutils, does exactly what the question asks. The -s
flag makes it so that it only breaks on whitespaces(ie. when the word ends), the value of n is passed using the argument -w
. Input is accepted via stdin
Bash/Coreutils, 8 bytes
fold -sw <n>
Try It Online!
The fold utility, that's bundled along with coreutils, does exactly what the question asks. The -s
flag makes it so that it only breaks on whitespaces(ie. when the word ends), the value of n is passed using the argument -w
. Input is accepted via stdin
edited Dec 1 at 18:14
answered Dec 1 at 18:08
Amith KK
17817
17817
Unfortunately, that doesn't work for the test case from the question, because fold counts a trailing space as one of the 50 bytes.
– Dennis♦
Dec 1 at 19:43
1
On a side note, only full programs and functions are allowed by default.fold -sw$1
(orfold -s$1
) would comply with that rule.
– Dennis♦
Dec 1 at 19:43
add a comment |
Unfortunately, that doesn't work for the test case from the question, because fold counts a trailing space as one of the 50 bytes.
– Dennis♦
Dec 1 at 19:43
1
On a side note, only full programs and functions are allowed by default.fold -sw$1
(orfold -s$1
) would comply with that rule.
– Dennis♦
Dec 1 at 19:43
Unfortunately, that doesn't work for the test case from the question, because fold counts a trailing space as one of the 50 bytes.
– Dennis♦
Dec 1 at 19:43
Unfortunately, that doesn't work for the test case from the question, because fold counts a trailing space as one of the 50 bytes.
– Dennis♦
Dec 1 at 19:43
1
1
On a side note, only full programs and functions are allowed by default.
fold -sw$1
(or fold -s$1
) would comply with that rule.– Dennis♦
Dec 1 at 19:43
On a side note, only full programs and functions are allowed by default.
fold -sw$1
(or fold -s$1
) would comply with that rule.– Dennis♦
Dec 1 at 19:43
add a comment |
up vote
-1
down vote
Python 3, 77 bytes, without using any library, thank @Jo King for point out my mistake:
def w(s, m):
for i in range(0,len(s),m):
print(s[i:i+m].lstrip())
demo: https://repl.it/repls/TeemingJoyousRepository
New contributor
This splits words in half, rather than splitting by spaces only
– Jo King
30 mins ago
I just edited my answer, thank you @JoKing
– chau giang
3 mins ago
add a comment |
up vote
-1
down vote
Python 3, 77 bytes, without using any library, thank @Jo King for point out my mistake:
def w(s, m):
for i in range(0,len(s),m):
print(s[i:i+m].lstrip())
demo: https://repl.it/repls/TeemingJoyousRepository
New contributor
This splits words in half, rather than splitting by spaces only
– Jo King
30 mins ago
I just edited my answer, thank you @JoKing
– chau giang
3 mins ago
add a comment |
up vote
-1
down vote
up vote
-1
down vote
Python 3, 77 bytes, without using any library, thank @Jo King for point out my mistake:
def w(s, m):
for i in range(0,len(s),m):
print(s[i:i+m].lstrip())
demo: https://repl.it/repls/TeemingJoyousRepository
New contributor
Python 3, 77 bytes, without using any library, thank @Jo King for point out my mistake:
def w(s, m):
for i in range(0,len(s),m):
print(s[i:i+m].lstrip())
demo: https://repl.it/repls/TeemingJoyousRepository
New contributor
edited 3 mins ago
New contributor
answered 34 mins ago
chau giang
11
11
New contributor
New contributor
This splits words in half, rather than splitting by spaces only
– Jo King
30 mins ago
I just edited my answer, thank you @JoKing
– chau giang
3 mins ago
add a comment |
This splits words in half, rather than splitting by spaces only
– Jo King
30 mins ago
I just edited my answer, thank you @JoKing
– chau giang
3 mins ago
This splits words in half, rather than splitting by spaces only
– Jo King
30 mins ago
This splits words in half, rather than splitting by spaces only
– Jo King
30 mins ago
I just edited my answer, thank you @JoKing
– chau giang
3 mins ago
I just edited my answer, thank you @JoKing
– chau giang
3 mins ago
add a comment |
If this is an answer to a challenge…
…Be sure to follow the challenge specification. However, please refrain from exploiting obvious loopholes. Answers abusing any of the standard loopholes are considered invalid. If you think a specification is unclear or underspecified, comment on the question instead.
…Try to optimize your score. For instance, answers to code-golf challenges should attempt to be as short as possible. You can always include a readable version of the code in addition to the competitive one.
Explanations of your answer make it more interesting to read and are very much encouraged.…Include a short header which indicates the language(s) of your code and its score, as defined by the challenge.
More generally…
…Please make sure to answer the question and provide sufficient detail.
…Avoid asking for help, clarification or responding to other answers (use comments instead).
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodegolf.stackexchange.com%2fquestions%2f176870%2fmake-a-simple-word-wrapper%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Format a list of words
– user202729
Dec 1 at 1:49
3
n is the max line length ? or the length we have to reach before line break ?
– david
Dec 1 at 10:27
1
@david, or the number of lines?
– Peter Taylor
Dec 1 at 13:24
1
28 bytes Python is it relevant?
– david
Dec 1 at 14:12
3
n
is the max line length, sorry that that was not clear. I will clarify. Also, the rules have now been updated so a simple split doesn't work.– ATMunn
Dec 1 at 16:09