Split into three!
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ margin-bottom:0;
}
$begingroup$
Given a string, you've to split it into groups of three characters (by padding
_
at the end).
Related, but still it's different.
Sample I/O:
'abcde' -> 'abc', 'de_'
'1234' -> '123', '4__'
'' -> or falsey value
'Three spree!' -> 'Thr', 'ee ', 'spr', 'ee!'
6 MB string
This is a code-golf, so fewest bytes will win!
Edit: Finally, output is unrestricted.
code-golf string array
$endgroup$
|
show 6 more comments
$begingroup$
Given a string, you've to split it into groups of three characters (by padding
_
at the end).
Related, but still it's different.
Sample I/O:
'abcde' -> 'abc', 'de_'
'1234' -> '123', '4__'
'' -> or falsey value
'Three spree!' -> 'Thr', 'ee ', 'spr', 'ee!'
6 MB string
This is a code-golf, so fewest bytes will win!
Edit: Finally, output is unrestricted.
code-golf string array
$endgroup$
10
$begingroup$
Why special case the empty string? May we choose which character to use for the padding?
$endgroup$
– Shaggy
May 19 at 14:49
12
$begingroup$
So the task is actually: Given a string, return a falsey value if it is empty, otherwise split it into groups of three, padding with underscores if necessary? Seems like an odd pair-up of two unrelated tasks (checking string length and splitting).
$endgroup$
– Adám
May 19 at 15:27
14
$begingroup$
Things to avoid: Exceptional edge cases. In this case, an empty string should returnan empty array or equivalent, not a falsey value
$endgroup$
– Jo King
May 19 at 22:05
6
$begingroup$
Lots of statically-typed languages cannot return more than one type from a function
$endgroup$
– Embodiment of Ignorance
May 19 at 23:30
4
$begingroup$
@manassehkatz Yes, but only in those languages. In some languages it makes solutions far more complicated, or even impossible (e.g statically typed languages).
$endgroup$
– Jo King
May 20 at 22:01
|
show 6 more comments
$begingroup$
Given a string, you've to split it into groups of three characters (by padding
_
at the end).
Related, but still it's different.
Sample I/O:
'abcde' -> 'abc', 'de_'
'1234' -> '123', '4__'
'' -> or falsey value
'Three spree!' -> 'Thr', 'ee ', 'spr', 'ee!'
6 MB string
This is a code-golf, so fewest bytes will win!
Edit: Finally, output is unrestricted.
code-golf string array
$endgroup$
Given a string, you've to split it into groups of three characters (by padding
_
at the end).
Related, but still it's different.
Sample I/O:
'abcde' -> 'abc', 'de_'
'1234' -> '123', '4__'
'' -> or falsey value
'Three spree!' -> 'Thr', 'ee ', 'spr', 'ee!'
6 MB string
This is a code-golf, so fewest bytes will win!
Edit: Finally, output is unrestricted.
code-golf string array
code-golf string array
edited May 20 at 14:54
Community♦
1
1
asked May 19 at 12:09
rv7rv7
3562 silver badges11 bronze badges
3562 silver badges11 bronze badges
10
$begingroup$
Why special case the empty string? May we choose which character to use for the padding?
$endgroup$
– Shaggy
May 19 at 14:49
12
$begingroup$
So the task is actually: Given a string, return a falsey value if it is empty, otherwise split it into groups of three, padding with underscores if necessary? Seems like an odd pair-up of two unrelated tasks (checking string length and splitting).
$endgroup$
– Adám
May 19 at 15:27
14
$begingroup$
Things to avoid: Exceptional edge cases. In this case, an empty string should returnan empty array or equivalent, not a falsey value
$endgroup$
– Jo King
May 19 at 22:05
6
$begingroup$
Lots of statically-typed languages cannot return more than one type from a function
$endgroup$
– Embodiment of Ignorance
May 19 at 23:30
4
$begingroup$
@manassehkatz Yes, but only in those languages. In some languages it makes solutions far more complicated, or even impossible (e.g statically typed languages).
$endgroup$
– Jo King
May 20 at 22:01
|
show 6 more comments
10
$begingroup$
Why special case the empty string? May we choose which character to use for the padding?
$endgroup$
– Shaggy
May 19 at 14:49
12
$begingroup$
So the task is actually: Given a string, return a falsey value if it is empty, otherwise split it into groups of three, padding with underscores if necessary? Seems like an odd pair-up of two unrelated tasks (checking string length and splitting).
$endgroup$
– Adám
May 19 at 15:27
14
$begingroup$
Things to avoid: Exceptional edge cases. In this case, an empty string should returnan empty array or equivalent, not a falsey value
$endgroup$
– Jo King
May 19 at 22:05
6
$begingroup$
Lots of statically-typed languages cannot return more than one type from a function
$endgroup$
– Embodiment of Ignorance
May 19 at 23:30
4
$begingroup$
@manassehkatz Yes, but only in those languages. In some languages it makes solutions far more complicated, or even impossible (e.g statically typed languages).
$endgroup$
– Jo King
May 20 at 22:01
10
10
$begingroup$
Why special case the empty string? May we choose which character to use for the padding?
$endgroup$
– Shaggy
May 19 at 14:49
$begingroup$
Why special case the empty string? May we choose which character to use for the padding?
$endgroup$
– Shaggy
May 19 at 14:49
12
12
$begingroup$
So the task is actually: Given a string, return a falsey value if it is empty, otherwise split it into groups of three, padding with underscores if necessary? Seems like an odd pair-up of two unrelated tasks (checking string length and splitting).
$endgroup$
– Adám
May 19 at 15:27
$begingroup$
So the task is actually: Given a string, return a falsey value if it is empty, otherwise split it into groups of three, padding with underscores if necessary? Seems like an odd pair-up of two unrelated tasks (checking string length and splitting).
$endgroup$
– Adám
May 19 at 15:27
14
14
$begingroup$
Things to avoid: Exceptional edge cases. In this case, an empty string should returnan empty array or equivalent, not a falsey value
$endgroup$
– Jo King
May 19 at 22:05
$begingroup$
Things to avoid: Exceptional edge cases. In this case, an empty string should returnan empty array or equivalent, not a falsey value
$endgroup$
– Jo King
May 19 at 22:05
6
6
$begingroup$
Lots of statically-typed languages cannot return more than one type from a function
$endgroup$
– Embodiment of Ignorance
May 19 at 23:30
$begingroup$
Lots of statically-typed languages cannot return more than one type from a function
$endgroup$
– Embodiment of Ignorance
May 19 at 23:30
4
4
$begingroup$
@manassehkatz Yes, but only in those languages. In some languages it makes solutions far more complicated, or even impossible (e.g statically typed languages).
$endgroup$
– Jo King
May 20 at 22:01
$begingroup$
@manassehkatz Yes, but only in those languages. In some languages it makes solutions far more complicated, or even impossible (e.g statically typed languages).
$endgroup$
– Jo King
May 20 at 22:01
|
show 6 more comments
37 Answers
37
active
oldest
votes
1 2
next
$begingroup$
05AB1E, 9 8 bytes
…___«3ô¨
Try it online!
or as a Test Suite
Explanation
…___« # append "___" to input
3ô # split into groups of 3
¨ # discard the last group
$endgroup$
add a comment |
$begingroup$
Python 3, 58 47 34 bytes
I'm sure someone else can do better Someone else did better. Thanks Jo King for -11 -24 bytes!
Output is unrestricted, welcome to tuple hell. Returns empty list (falsy) on empty input
lambda x:[*zip(*[iter(x+"__")]*3)]
TIO
$endgroup$
add a comment |
$begingroup$
JavaScript, 25 bytes
s=>`${s}__`.match(/.../g)
Try it
$endgroup$
add a comment |
$begingroup$
Perl 5, 16 15 bytes
"@___"=~/.../g
Try it online!
$endgroup$
1
$begingroup$
15 with"@___"=~/.../g
. There were other 16s:(pop.__)=~/.../g
ormap/.../g,pop.__
.
$endgroup$
– Grimy
May 20 at 11:50
1
$begingroup$
Thx to @Grimy for the tip on . It shaved off 1 byte and I learned something new.
$endgroup$
– Kjetil S.
May 20 at 13:30
add a comment |
$begingroup$
APL+WIN 36 24 22 bytes
12 bytes saved as a result of output now being de-restricted and using the code in @Adám's first comment modified to work in APL+WIN and a further 2 with his second comment. Thanks.
(⌈(↑⍴s)÷3)3⍴(s←⎕),'__'
Prompts for input of the string and outputs the result as a nx3 array
Try it online! Courtesy of Dyalog Classic
$endgroup$
$begingroup$
@Adám. Throws a domain error in APL+WIN at the right most ⍴
$endgroup$
– Graham
May 19 at 13:45
$begingroup$
Fails on''
, no? I think OP (for some strange reason) requires the result to be0
(with any rank).
$endgroup$
– Adám
May 19 at 15:47
1
$begingroup$
@Adám It produces a 0 x 3 array. The OP now appears to want "falsey" for a null input. With the spec keeping on changing I am going to bow out at this point and leave my answer as its stands! Thanks for your improvements.
$endgroup$
– Graham
May 19 at 16:12
add a comment |
$begingroup$
JavaScript, 51 50 48 27 25
b=>(b+"__").match(/.../g)
Try it online!
$endgroup$
$begingroup$
Welcome to PPCG! :) But ... codegolf.stackexchange.com/a/185808/58974
$endgroup$
– Shaggy
May 24 at 16:51
$begingroup$
@Shaggy I didn't even see that ¯_(ツ)_/¯
$endgroup$
– VFDan
May 24 at 17:21
$begingroup$
No worries, it happens.
$endgroup$
– Shaggy
May 24 at 17:24
add a comment |
$begingroup$
Perl 6, 19 bytes
{$_~"__"~~m:g/.../}
Try it online!
Pads the string by two underscores then splits the string into chunks of three characters. Returns as an array of Match objects.
$endgroup$
add a comment |
$begingroup$
Japt, 8 bytes
+1 byte to special case the empty string. Can save 2 if we can choose our padding character.
©ò3 ú'_3
Try it
©ò3 ú'_3 :Implicit input of string
© :Logical AND with
ò3 :Split into chunks of 3
ú'_3 :Right pad each with "_" to length 3
$endgroup$
add a comment |
$begingroup$
Stax, 7 bytes
é☻εgP▀╪
Run and debug it
For an empty string input, the result is an empty array, which is a falsey value in stax.
$endgroup$
add a comment |
$begingroup$
CJam, 11 bytes
q'_3*+3/);p
Try it online!
For empty input this gives an empty string, which is falsy.
How it works
q e# Read input as a string
'_ e# Push char '_'
3* e# String formed by that char repeated 3 times
+ e# Concatenate to input string
3/ e# Split in groups of 3, the last of which may be shorter. Gives array of strings
); e# Detach last string from the array and delete it
p e# Print string representation of the array
$endgroup$
add a comment |
$begingroup$
Retina 0.8.2, 10 bytes
$
__
!`...
Try it online! Link includes test cases. Explanation:
$
__
Append two _
s, in case the last group needs to be padded.
!`...
Match as many groups of three as possible, outputting the matches themselves rather than the count. (In Retina 1 this would be L
instead of !
.)
$endgroup$
add a comment |
$begingroup$
C (gcc), 67 bytes
i;f(char*_){for(;*_;puts(""))for(i=3;i--;)putchar(*_?*_++:95);_=0;}
Try it online!
Always returns a falsey value (0).
$endgroup$
1
$begingroup$
Do you even need to return anything?
$endgroup$
– ceilingcat
May 20 at 14:11
$begingroup$
63 bytes
$endgroup$
– Johan du Toit
May 21 at 10:28
add a comment |
$begingroup$
Wolfram Language (Mathematica), 28 21 bytes
-7: No longer requires falsy (False
) value on empty input
Partition[#,3,1,1,_]&
Try it online!
Takes a list of characters as input. Returns a list of 3-tuples of characters padded with Blank
s (_
).
34 27 bytes
StringPartition[#<>"__",3]&
Try it online!
String input, list of strings output
$endgroup$
add a comment |
$begingroup$
Jelly, 9 bytes
s3o€“___”
A monadic Link accepting a list of characters which yields a list of lists of characters (an empty input yields empty output).
Try it online!
How?
s3o€“___” - Link: list of characters
s3 - split into chunks of three
€ - for each chunk:
o - OR (vectorises):
“___” - list of characters = ['_', '_', '_']
Notes:
The €
is only necessary to handle the edge case of an empty input.
A full program can drop a trailing ”
, but here we can't do that as the printing behaviour of a full program smashes everything together.
Equivalent 9:
o3ÐƤ“___”
Try it
Alternative 9:
;“___”s3Ṗ
Try it
$endgroup$
add a comment |
$begingroup$
J, 16 bytes
[:}:_3]'___',~]
Try it online!
K (oK), 19 17 bytes
-2 bytes thanks to ngn!
{-1_0N 3#x,"___"}
Try it online!
$endgroup$
1
$begingroup$
k:(0N;3)
->0N 3
$endgroup$
– ngn
May 20 at 7:21
$begingroup$
@ngn Thank you!
$endgroup$
– Galen Ivanov
May 20 at 7:28
add a comment |
$begingroup$
Java 10, 116 113 bytes
s->{s+="__";int l=s.length()/3,i=l;var r=new String[l];for(;i-->0;)r[i]=s.substring(i*3,i*3+3);return l<1?0>1:r;}
Try it online.
Or 104 101 bytes if an empty array instead of false
is allowed as output..
s->{s+="__";int l=s.length()/3;var r=new String[l];for(;l-->0;)r[l]=s.substring(l*3,l*3+3);return r;}
Try it online.
Explanation:
s->{ // Method with String as both parameter and return-type
s+="__"; // Append two "_" to the input-String
int l=s.length()/3; // Get the length, integer-divided by 3
var r=new String[l]; // Create a string-array with that many parts
for(;l-->0;) // Loop `l` in the range (l, 0]:
r[l]= // Set the `l`'th value of the array to:
s.substring(l*3,l*3+3); // Get the substring of size 3 from index `l*3` from `s`
return r;} // Return the array
$endgroup$
$begingroup$
An empty array is now allowed
$endgroup$
– Benjamin Urquhart
May 26 at 3:57
add a comment |
$begingroup$
Ruby, 73 42 bytes
a=gets
a.length!=0?a.scan(/.{1,3}/).map{|s|(s+'_'*3)[0,3]}:'falsey value'
Edit: As falsey value looks like it's not required:
gets.scan(/.{1,3}/).map{|s|(s+'_'*3)[0,3]}
$endgroup$
1
$begingroup$
The maximum padding is of 2 characters, so'_'*2
would be enough, for which a literal'__'
is shorter. But if you add the padding in advance then simply not match the pieces shorter than 3 characters, is shorter:puts"#{gets}__".scan /.../
. (Note that without the explicit printing that is consideredirb
notruby
.)
$endgroup$
– manatwork
May 20 at 15:06
add a comment |
$begingroup$
C# (Visual C# Interactive Compiler), 74 bytes
Just append two underscores '_' at the end of the input to make sure they get printed if the length of the input isn't a factor of 3.
s=>Enumerable.Range(0,(s.Length+2)/3).Select(i=>(s+"__").Substring(i*3,3))
Try it online!
$endgroup$
$begingroup$
67
$endgroup$
– dana
May 22 at 5:20
$begingroup$
57
$endgroup$
– someone
May 25 at 1:22
add a comment |
$begingroup$
Kotlin, 34 bytes
{"${it}__".chunked(3).dropLast(1)}
Try it online!
$endgroup$
$begingroup$
this does not work, try{"${it}___".chunked(3).dropLast(1)}
$endgroup$
– pme
May 21 at 6:45
add a comment |
$begingroup$
C (gcc), 55 bytes
i;f(char*s){for(;i%4|*s;)putchar(++i%4?*s?*s++:95:10);}
Try it online!
$endgroup$
$begingroup$
Using 9(t
) instead of 10(n
) should be fine, but that's not main point
$endgroup$
– l4m2
May 20 at 15:23
add a comment |
$begingroup$
C (clang), 128 126 94 67 bytes
67 bytes thanks to @ceilingcat
f(char*k){for(;*k;k++)printf("%c%c%cn",*k,*++k?*k:95,*++k?*k:95);}
Try it online!
$endgroup$
add a comment |
$begingroup$
Bash, 90 bytes
This uses Bash features rather than a combination of more traditional Bourne shell plus *nix commands (which one version I created ended up at 205 bytes). I cheated by using the dodge of adding two _ characters to the string.
c=;read a;a=${a}__;while (($(echo ${#a})>2));do b=${a:0:3};c=$c $b;a=${a#$b};done;echo $c
Try it online!
$endgroup$
add a comment |
$begingroup$
PowerShell, 58 35 bytes
$args-split'(...)'-ne''|% *ht 3 '_'
-23 bytes thanks to mazzy.
Try it online!
$endgroup$
$begingroup$
Nice. 1) You can count a code that can be extracted into a ps1-file and executed. 2) See shortcuts. 3) Try to golf more
$endgroup$
– mazzy
May 25 at 5:18
add a comment |
$begingroup$
GNU sed, 27 bytes
s:$:__:
s:...:& :g
s: _*$::
Try it online!
It gets a bit tricky regarding the empty string input, since sed has no meaning of a falsy value. So to deal with this, I provide you with two possible interpretations of the rules to validate my submission:
A. You essentially provide nothing as input, not even a trailing newline (as it is the case with all the examples, including that 6 Mb file).
Usage:
echo -n ""|sed -f script
Output: nothing is printed, because sed doesn't even run the script without input.
B. One could consider as falsy value for sed to be an unique string, i.e., returned only when the input is an empty string.
Usage:
echo ""|sed -f script
Output:
__
I prefer the first interpretation so much more, as I believe it to be the closest to the intended rule, but the last one helps if you run the script using that TIO link.
$endgroup$
add a comment |
$begingroup$
JavaScript (Babel Node), 45 bytes
_=>_.match(/.{1,3}/g).map(a=>a.padEnd(3,`_`))
Try it online!
$endgroup$
$begingroup$
44
$endgroup$
– Shaggy
May 19 at 15:13
$begingroup$
Doesn't work for me
$endgroup$
– VFDan
May 22 at 21:55
add a comment |
$begingroup$
Jelly, 10 bytes
s3;€⁾__ḣ€3
Try it online!
It feels like an 8 or 9 should be possible, but haven’t found one yet.
$endgroup$
add a comment |
$begingroup$
Attache, 34 23 bytes
PadRight&"_"&3=>@Chop&3
Try it online!
Explanation (outdated)
{On[#_-1,PadRight&"_"&3,_]}@Chop&3
@Chop&3 chop the input string into groups of 3s
{On[#_-1 ,_]} on the last group
,PadRight pad it
&3 to length three
&"_" with underscores
$endgroup$
$begingroup$
Would you save anything by padding all the elements instead of just the last one?
$endgroup$
– Shaggy
May 19 at 20:18
$begingroup$
@Shaggy Good point! I’ll look into it
$endgroup$
– Conor O'Brien
May 19 at 20:19
add a comment |
$begingroup$
Charcoal, 10 bytes
E⪪S³…⁺ι__³
Try it online! Link is to verbose version of code. Explanation:
S Input string
⪪ ³ Split into groups of up to 3 characters
E Map over each group
ι Current group
⁺ Concatenated with
__ Literal `__`
… ³ Moulded to length 3
Each group implicitly printed on its own line
$endgroup$
add a comment |
$begingroup$
Scala, 31 bytes
(s+"___").grouped(3).toSeq.init
Try it online!
Explanation
(s+"___") // add "___"
.grouped(3) // make groups of 3
.toSeq // change to Seq
.init // take all but last
$endgroup$
add a comment |
$begingroup$
Befunge-93, 30 29 bytes
~:1+%,~:1+!"`"*+,~:1+!"`"*+,,
Try it online!
Outputs nothing for an empty input, otherwise outputs strings of length 3 separated by NUL characters.
Explanation:
~ Push character of input to stack
:1+ Duplicate input and add 1
% Modulo top 2 values of stack and push result
If input was -1 (end of stream), calculate -1%0 -> halt
Otherwise calculate input%(input+1) -> input
, Pop and output character
~ Push character of input to stack
:1+! Duplicate input, add 1 and perform logical NOT
"`"* Multiply by 96 (ASCII code for '`')
This returns 96 or 0 depending on the result of the NOT
+ Add the top 2 values from the stack and push the result
If the input was -1 (end of stream), pushes -1+96=95, or the ASCII code for '_'
Otherwise pushes input+0
, Pop and output character
~:1+!"`"*+, Same block again to handle the third character
, Output a NUL character (stack is empty, so popping from stack just returns 0)
The instruction pointer wraps around at the end, looping the entire line.
$endgroup$
add a comment |
1 2
next
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "200"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
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%2f185783%2fsplit-into-three%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
37 Answers
37
active
oldest
votes
37 Answers
37
active
oldest
votes
active
oldest
votes
active
oldest
votes
1 2
next
$begingroup$
05AB1E, 9 8 bytes
…___«3ô¨
Try it online!
or as a Test Suite
Explanation
…___« # append "___" to input
3ô # split into groups of 3
¨ # discard the last group
$endgroup$
add a comment |
$begingroup$
05AB1E, 9 8 bytes
…___«3ô¨
Try it online!
or as a Test Suite
Explanation
…___« # append "___" to input
3ô # split into groups of 3
¨ # discard the last group
$endgroup$
add a comment |
$begingroup$
05AB1E, 9 8 bytes
…___«3ô¨
Try it online!
or as a Test Suite
Explanation
…___« # append "___" to input
3ô # split into groups of 3
¨ # discard the last group
$endgroup$
05AB1E, 9 8 bytes
…___«3ô¨
Try it online!
or as a Test Suite
Explanation
…___« # append "___" to input
3ô # split into groups of 3
¨ # discard the last group
edited May 19 at 16:38
answered May 19 at 13:01
EmignaEmigna
50.3k5 gold badges37 silver badges153 bronze badges
50.3k5 gold badges37 silver badges153 bronze badges
add a comment |
add a comment |
$begingroup$
Python 3, 58 47 34 bytes
I'm sure someone else can do better Someone else did better. Thanks Jo King for -11 -24 bytes!
Output is unrestricted, welcome to tuple hell. Returns empty list (falsy) on empty input
lambda x:[*zip(*[iter(x+"__")]*3)]
TIO
$endgroup$
add a comment |
$begingroup$
Python 3, 58 47 34 bytes
I'm sure someone else can do better Someone else did better. Thanks Jo King for -11 -24 bytes!
Output is unrestricted, welcome to tuple hell. Returns empty list (falsy) on empty input
lambda x:[*zip(*[iter(x+"__")]*3)]
TIO
$endgroup$
add a comment |
$begingroup$
Python 3, 58 47 34 bytes
I'm sure someone else can do better Someone else did better. Thanks Jo King for -11 -24 bytes!
Output is unrestricted, welcome to tuple hell. Returns empty list (falsy) on empty input
lambda x:[*zip(*[iter(x+"__")]*3)]
TIO
$endgroup$
Python 3, 58 47 34 bytes
I'm sure someone else can do better Someone else did better. Thanks Jo King for -11 -24 bytes!
Output is unrestricted, welcome to tuple hell. Returns empty list (falsy) on empty input
lambda x:[*zip(*[iter(x+"__")]*3)]
TIO
edited May 19 at 15:51
answered May 19 at 12:24
Benjamin UrquhartBenjamin Urquhart
1,1521 silver badge22 bronze badges
1,1521 silver badge22 bronze badges
add a comment |
add a comment |
$begingroup$
JavaScript, 25 bytes
s=>`${s}__`.match(/.../g)
Try it
$endgroup$
add a comment |
$begingroup$
JavaScript, 25 bytes
s=>`${s}__`.match(/.../g)
Try it
$endgroup$
add a comment |
$begingroup$
JavaScript, 25 bytes
s=>`${s}__`.match(/.../g)
Try it
$endgroup$
JavaScript, 25 bytes
s=>`${s}__`.match(/.../g)
Try it
answered May 19 at 20:53
ShaggyShaggy
20.4k3 gold badges20 silver badges69 bronze badges
20.4k3 gold badges20 silver badges69 bronze badges
add a comment |
add a comment |
$begingroup$
Perl 5, 16 15 bytes
"@___"=~/.../g
Try it online!
$endgroup$
1
$begingroup$
15 with"@___"=~/.../g
. There were other 16s:(pop.__)=~/.../g
ormap/.../g,pop.__
.
$endgroup$
– Grimy
May 20 at 11:50
1
$begingroup$
Thx to @Grimy for the tip on . It shaved off 1 byte and I learned something new.
$endgroup$
– Kjetil S.
May 20 at 13:30
add a comment |
$begingroup$
Perl 5, 16 15 bytes
"@___"=~/.../g
Try it online!
$endgroup$
1
$begingroup$
15 with"@___"=~/.../g
. There were other 16s:(pop.__)=~/.../g
ormap/.../g,pop.__
.
$endgroup$
– Grimy
May 20 at 11:50
1
$begingroup$
Thx to @Grimy for the tip on . It shaved off 1 byte and I learned something new.
$endgroup$
– Kjetil S.
May 20 at 13:30
add a comment |
$begingroup$
Perl 5, 16 15 bytes
"@___"=~/.../g
Try it online!
$endgroup$
Perl 5, 16 15 bytes
"@___"=~/.../g
Try it online!
edited May 20 at 13:29
answered May 19 at 15:04
Kjetil S.Kjetil S.
6692 silver badges5 bronze badges
6692 silver badges5 bronze badges
1
$begingroup$
15 with"@___"=~/.../g
. There were other 16s:(pop.__)=~/.../g
ormap/.../g,pop.__
.
$endgroup$
– Grimy
May 20 at 11:50
1
$begingroup$
Thx to @Grimy for the tip on . It shaved off 1 byte and I learned something new.
$endgroup$
– Kjetil S.
May 20 at 13:30
add a comment |
1
$begingroup$
15 with"@___"=~/.../g
. There were other 16s:(pop.__)=~/.../g
ormap/.../g,pop.__
.
$endgroup$
– Grimy
May 20 at 11:50
1
$begingroup$
Thx to @Grimy for the tip on . It shaved off 1 byte and I learned something new.
$endgroup$
– Kjetil S.
May 20 at 13:30
1
1
$begingroup$
15 with
"@___"=~/.../g
. There were other 16s: (pop.__)=~/.../g
or map/.../g,pop.__
.$endgroup$
– Grimy
May 20 at 11:50
$begingroup$
15 with
"@___"=~/.../g
. There were other 16s: (pop.__)=~/.../g
or map/.../g,pop.__
.$endgroup$
– Grimy
May 20 at 11:50
1
1
$begingroup$
Thx to @Grimy for the tip on . It shaved off 1 byte and I learned something new.
$endgroup$
– Kjetil S.
May 20 at 13:30
$begingroup$
Thx to @Grimy for the tip on . It shaved off 1 byte and I learned something new.
$endgroup$
– Kjetil S.
May 20 at 13:30
add a comment |
$begingroup$
APL+WIN 36 24 22 bytes
12 bytes saved as a result of output now being de-restricted and using the code in @Adám's first comment modified to work in APL+WIN and a further 2 with his second comment. Thanks.
(⌈(↑⍴s)÷3)3⍴(s←⎕),'__'
Prompts for input of the string and outputs the result as a nx3 array
Try it online! Courtesy of Dyalog Classic
$endgroup$
$begingroup$
@Adám. Throws a domain error in APL+WIN at the right most ⍴
$endgroup$
– Graham
May 19 at 13:45
$begingroup$
Fails on''
, no? I think OP (for some strange reason) requires the result to be0
(with any rank).
$endgroup$
– Adám
May 19 at 15:47
1
$begingroup$
@Adám It produces a 0 x 3 array. The OP now appears to want "falsey" for a null input. With the spec keeping on changing I am going to bow out at this point and leave my answer as its stands! Thanks for your improvements.
$endgroup$
– Graham
May 19 at 16:12
add a comment |
$begingroup$
APL+WIN 36 24 22 bytes
12 bytes saved as a result of output now being de-restricted and using the code in @Adám's first comment modified to work in APL+WIN and a further 2 with his second comment. Thanks.
(⌈(↑⍴s)÷3)3⍴(s←⎕),'__'
Prompts for input of the string and outputs the result as a nx3 array
Try it online! Courtesy of Dyalog Classic
$endgroup$
$begingroup$
@Adám. Throws a domain error in APL+WIN at the right most ⍴
$endgroup$
– Graham
May 19 at 13:45
$begingroup$
Fails on''
, no? I think OP (for some strange reason) requires the result to be0
(with any rank).
$endgroup$
– Adám
May 19 at 15:47
1
$begingroup$
@Adám It produces a 0 x 3 array. The OP now appears to want "falsey" for a null input. With the spec keeping on changing I am going to bow out at this point and leave my answer as its stands! Thanks for your improvements.
$endgroup$
– Graham
May 19 at 16:12
add a comment |
$begingroup$
APL+WIN 36 24 22 bytes
12 bytes saved as a result of output now being de-restricted and using the code in @Adám's first comment modified to work in APL+WIN and a further 2 with his second comment. Thanks.
(⌈(↑⍴s)÷3)3⍴(s←⎕),'__'
Prompts for input of the string and outputs the result as a nx3 array
Try it online! Courtesy of Dyalog Classic
$endgroup$
APL+WIN 36 24 22 bytes
12 bytes saved as a result of output now being de-restricted and using the code in @Adám's first comment modified to work in APL+WIN and a further 2 with his second comment. Thanks.
(⌈(↑⍴s)÷3)3⍴(s←⎕),'__'
Prompts for input of the string and outputs the result as a nx3 array
Try it online! Courtesy of Dyalog Classic
edited May 19 at 15:04
answered May 19 at 12:46
GrahamGraham
2,8167 silver badges8 bronze badges
2,8167 silver badges8 bronze badges
$begingroup$
@Adám. Throws a domain error in APL+WIN at the right most ⍴
$endgroup$
– Graham
May 19 at 13:45
$begingroup$
Fails on''
, no? I think OP (for some strange reason) requires the result to be0
(with any rank).
$endgroup$
– Adám
May 19 at 15:47
1
$begingroup$
@Adám It produces a 0 x 3 array. The OP now appears to want "falsey" for a null input. With the spec keeping on changing I am going to bow out at this point and leave my answer as its stands! Thanks for your improvements.
$endgroup$
– Graham
May 19 at 16:12
add a comment |
$begingroup$
@Adám. Throws a domain error in APL+WIN at the right most ⍴
$endgroup$
– Graham
May 19 at 13:45
$begingroup$
Fails on''
, no? I think OP (for some strange reason) requires the result to be0
(with any rank).
$endgroup$
– Adám
May 19 at 15:47
1
$begingroup$
@Adám It produces a 0 x 3 array. The OP now appears to want "falsey" for a null input. With the spec keeping on changing I am going to bow out at this point and leave my answer as its stands! Thanks for your improvements.
$endgroup$
– Graham
May 19 at 16:12
$begingroup$
@Adám. Throws a domain error in APL+WIN at the right most ⍴
$endgroup$
– Graham
May 19 at 13:45
$begingroup$
@Adám. Throws a domain error in APL+WIN at the right most ⍴
$endgroup$
– Graham
May 19 at 13:45
$begingroup$
Fails on
''
, no? I think OP (for some strange reason) requires the result to be 0
(with any rank).$endgroup$
– Adám
May 19 at 15:47
$begingroup$
Fails on
''
, no? I think OP (for some strange reason) requires the result to be 0
(with any rank).$endgroup$
– Adám
May 19 at 15:47
1
1
$begingroup$
@Adám It produces a 0 x 3 array. The OP now appears to want "falsey" for a null input. With the spec keeping on changing I am going to bow out at this point and leave my answer as its stands! Thanks for your improvements.
$endgroup$
– Graham
May 19 at 16:12
$begingroup$
@Adám It produces a 0 x 3 array. The OP now appears to want "falsey" for a null input. With the spec keeping on changing I am going to bow out at this point and leave my answer as its stands! Thanks for your improvements.
$endgroup$
– Graham
May 19 at 16:12
add a comment |
$begingroup$
JavaScript, 51 50 48 27 25
b=>(b+"__").match(/.../g)
Try it online!
$endgroup$
$begingroup$
Welcome to PPCG! :) But ... codegolf.stackexchange.com/a/185808/58974
$endgroup$
– Shaggy
May 24 at 16:51
$begingroup$
@Shaggy I didn't even see that ¯_(ツ)_/¯
$endgroup$
– VFDan
May 24 at 17:21
$begingroup$
No worries, it happens.
$endgroup$
– Shaggy
May 24 at 17:24
add a comment |
$begingroup$
JavaScript, 51 50 48 27 25
b=>(b+"__").match(/.../g)
Try it online!
$endgroup$
$begingroup$
Welcome to PPCG! :) But ... codegolf.stackexchange.com/a/185808/58974
$endgroup$
– Shaggy
May 24 at 16:51
$begingroup$
@Shaggy I didn't even see that ¯_(ツ)_/¯
$endgroup$
– VFDan
May 24 at 17:21
$begingroup$
No worries, it happens.
$endgroup$
– Shaggy
May 24 at 17:24
add a comment |
$begingroup$
JavaScript, 51 50 48 27 25
b=>(b+"__").match(/.../g)
Try it online!
$endgroup$
JavaScript, 51 50 48 27 25
b=>(b+"__").match(/.../g)
Try it online!
edited May 24 at 16:46
answered May 22 at 22:14
VFDanVFDan
1517 bronze badges
1517 bronze badges
$begingroup$
Welcome to PPCG! :) But ... codegolf.stackexchange.com/a/185808/58974
$endgroup$
– Shaggy
May 24 at 16:51
$begingroup$
@Shaggy I didn't even see that ¯_(ツ)_/¯
$endgroup$
– VFDan
May 24 at 17:21
$begingroup$
No worries, it happens.
$endgroup$
– Shaggy
May 24 at 17:24
add a comment |
$begingroup$
Welcome to PPCG! :) But ... codegolf.stackexchange.com/a/185808/58974
$endgroup$
– Shaggy
May 24 at 16:51
$begingroup$
@Shaggy I didn't even see that ¯_(ツ)_/¯
$endgroup$
– VFDan
May 24 at 17:21
$begingroup$
No worries, it happens.
$endgroup$
– Shaggy
May 24 at 17:24
$begingroup$
Welcome to PPCG! :) But ... codegolf.stackexchange.com/a/185808/58974
$endgroup$
– Shaggy
May 24 at 16:51
$begingroup$
Welcome to PPCG! :) But ... codegolf.stackexchange.com/a/185808/58974
$endgroup$
– Shaggy
May 24 at 16:51
$begingroup$
@Shaggy I didn't even see that ¯_(ツ)_/¯
$endgroup$
– VFDan
May 24 at 17:21
$begingroup$
@Shaggy I didn't even see that ¯_(ツ)_/¯
$endgroup$
– VFDan
May 24 at 17:21
$begingroup$
No worries, it happens.
$endgroup$
– Shaggy
May 24 at 17:24
$begingroup$
No worries, it happens.
$endgroup$
– Shaggy
May 24 at 17:24
add a comment |
$begingroup$
Perl 6, 19 bytes
{$_~"__"~~m:g/.../}
Try it online!
Pads the string by two underscores then splits the string into chunks of three characters. Returns as an array of Match objects.
$endgroup$
add a comment |
$begingroup$
Perl 6, 19 bytes
{$_~"__"~~m:g/.../}
Try it online!
Pads the string by two underscores then splits the string into chunks of three characters. Returns as an array of Match objects.
$endgroup$
add a comment |
$begingroup$
Perl 6, 19 bytes
{$_~"__"~~m:g/.../}
Try it online!
Pads the string by two underscores then splits the string into chunks of three characters. Returns as an array of Match objects.
$endgroup$
Perl 6, 19 bytes
{$_~"__"~~m:g/.../}
Try it online!
Pads the string by two underscores then splits the string into chunks of three characters. Returns as an array of Match objects.
answered May 19 at 12:29
Jo KingJo King
29.6k3 gold badges70 silver badges136 bronze badges
29.6k3 gold badges70 silver badges136 bronze badges
add a comment |
add a comment |
$begingroup$
Japt, 8 bytes
+1 byte to special case the empty string. Can save 2 if we can choose our padding character.
©ò3 ú'_3
Try it
©ò3 ú'_3 :Implicit input of string
© :Logical AND with
ò3 :Split into chunks of 3
ú'_3 :Right pad each with "_" to length 3
$endgroup$
add a comment |
$begingroup$
Japt, 8 bytes
+1 byte to special case the empty string. Can save 2 if we can choose our padding character.
©ò3 ú'_3
Try it
©ò3 ú'_3 :Implicit input of string
© :Logical AND with
ò3 :Split into chunks of 3
ú'_3 :Right pad each with "_" to length 3
$endgroup$
add a comment |
$begingroup$
Japt, 8 bytes
+1 byte to special case the empty string. Can save 2 if we can choose our padding character.
©ò3 ú'_3
Try it
©ò3 ú'_3 :Implicit input of string
© :Logical AND with
ò3 :Split into chunks of 3
ú'_3 :Right pad each with "_" to length 3
$endgroup$
Japt, 8 bytes
+1 byte to special case the empty string. Can save 2 if we can choose our padding character.
©ò3 ú'_3
Try it
©ò3 ú'_3 :Implicit input of string
© :Logical AND with
ò3 :Split into chunks of 3
ú'_3 :Right pad each with "_" to length 3
edited May 19 at 14:55
answered May 19 at 14:47
ShaggyShaggy
20.4k3 gold badges20 silver badges69 bronze badges
20.4k3 gold badges20 silver badges69 bronze badges
add a comment |
add a comment |
$begingroup$
Stax, 7 bytes
é☻εgP▀╪
Run and debug it
For an empty string input, the result is an empty array, which is a falsey value in stax.
$endgroup$
add a comment |
$begingroup$
Stax, 7 bytes
é☻εgP▀╪
Run and debug it
For an empty string input, the result is an empty array, which is a falsey value in stax.
$endgroup$
add a comment |
$begingroup$
Stax, 7 bytes
é☻εgP▀╪
Run and debug it
For an empty string input, the result is an empty array, which is a falsey value in stax.
$endgroup$
Stax, 7 bytes
é☻εgP▀╪
Run and debug it
For an empty string input, the result is an empty array, which is a falsey value in stax.
answered May 19 at 15:02
recursiverecursive
7,21814 silver badges30 bronze badges
7,21814 silver badges30 bronze badges
add a comment |
add a comment |
$begingroup$
CJam, 11 bytes
q'_3*+3/);p
Try it online!
For empty input this gives an empty string, which is falsy.
How it works
q e# Read input as a string
'_ e# Push char '_'
3* e# String formed by that char repeated 3 times
+ e# Concatenate to input string
3/ e# Split in groups of 3, the last of which may be shorter. Gives array of strings
); e# Detach last string from the array and delete it
p e# Print string representation of the array
$endgroup$
add a comment |
$begingroup$
CJam, 11 bytes
q'_3*+3/);p
Try it online!
For empty input this gives an empty string, which is falsy.
How it works
q e# Read input as a string
'_ e# Push char '_'
3* e# String formed by that char repeated 3 times
+ e# Concatenate to input string
3/ e# Split in groups of 3, the last of which may be shorter. Gives array of strings
); e# Detach last string from the array and delete it
p e# Print string representation of the array
$endgroup$
add a comment |
$begingroup$
CJam, 11 bytes
q'_3*+3/);p
Try it online!
For empty input this gives an empty string, which is falsy.
How it works
q e# Read input as a string
'_ e# Push char '_'
3* e# String formed by that char repeated 3 times
+ e# Concatenate to input string
3/ e# Split in groups of 3, the last of which may be shorter. Gives array of strings
); e# Detach last string from the array and delete it
p e# Print string representation of the array
$endgroup$
CJam, 11 bytes
q'_3*+3/);p
Try it online!
For empty input this gives an empty string, which is falsy.
How it works
q e# Read input as a string
'_ e# Push char '_'
3* e# String formed by that char repeated 3 times
+ e# Concatenate to input string
3/ e# Split in groups of 3, the last of which may be shorter. Gives array of strings
); e# Detach last string from the array and delete it
p e# Print string representation of the array
edited May 19 at 15:45
answered May 19 at 15:19
Luis MendoLuis Mendo
77.2k8 gold badges95 silver badges302 bronze badges
77.2k8 gold badges95 silver badges302 bronze badges
add a comment |
add a comment |
$begingroup$
Retina 0.8.2, 10 bytes
$
__
!`...
Try it online! Link includes test cases. Explanation:
$
__
Append two _
s, in case the last group needs to be padded.
!`...
Match as many groups of three as possible, outputting the matches themselves rather than the count. (In Retina 1 this would be L
instead of !
.)
$endgroup$
add a comment |
$begingroup$
Retina 0.8.2, 10 bytes
$
__
!`...
Try it online! Link includes test cases. Explanation:
$
__
Append two _
s, in case the last group needs to be padded.
!`...
Match as many groups of three as possible, outputting the matches themselves rather than the count. (In Retina 1 this would be L
instead of !
.)
$endgroup$
add a comment |
$begingroup$
Retina 0.8.2, 10 bytes
$
__
!`...
Try it online! Link includes test cases. Explanation:
$
__
Append two _
s, in case the last group needs to be padded.
!`...
Match as many groups of three as possible, outputting the matches themselves rather than the count. (In Retina 1 this would be L
instead of !
.)
$endgroup$
Retina 0.8.2, 10 bytes
$
__
!`...
Try it online! Link includes test cases. Explanation:
$
__
Append two _
s, in case the last group needs to be padded.
!`...
Match as many groups of three as possible, outputting the matches themselves rather than the count. (In Retina 1 this would be L
instead of !
.)
answered May 19 at 22:23
NeilNeil
86.3k8 gold badges46 silver badges183 bronze badges
86.3k8 gold badges46 silver badges183 bronze badges
add a comment |
add a comment |
$begingroup$
C (gcc), 67 bytes
i;f(char*_){for(;*_;puts(""))for(i=3;i--;)putchar(*_?*_++:95);_=0;}
Try it online!
Always returns a falsey value (0).
$endgroup$
1
$begingroup$
Do you even need to return anything?
$endgroup$
– ceilingcat
May 20 at 14:11
$begingroup$
63 bytes
$endgroup$
– Johan du Toit
May 21 at 10:28
add a comment |
$begingroup$
C (gcc), 67 bytes
i;f(char*_){for(;*_;puts(""))for(i=3;i--;)putchar(*_?*_++:95);_=0;}
Try it online!
Always returns a falsey value (0).
$endgroup$
1
$begingroup$
Do you even need to return anything?
$endgroup$
– ceilingcat
May 20 at 14:11
$begingroup$
63 bytes
$endgroup$
– Johan du Toit
May 21 at 10:28
add a comment |
$begingroup$
C (gcc), 67 bytes
i;f(char*_){for(;*_;puts(""))for(i=3;i--;)putchar(*_?*_++:95);_=0;}
Try it online!
Always returns a falsey value (0).
$endgroup$
C (gcc), 67 bytes
i;f(char*_){for(;*_;puts(""))for(i=3;i--;)putchar(*_?*_++:95);_=0;}
Try it online!
Always returns a falsey value (0).
answered May 19 at 23:07
attinatattinat
1,6072 silver badges9 bronze badges
1,6072 silver badges9 bronze badges
1
$begingroup$
Do you even need to return anything?
$endgroup$
– ceilingcat
May 20 at 14:11
$begingroup$
63 bytes
$endgroup$
– Johan du Toit
May 21 at 10:28
add a comment |
1
$begingroup$
Do you even need to return anything?
$endgroup$
– ceilingcat
May 20 at 14:11
$begingroup$
63 bytes
$endgroup$
– Johan du Toit
May 21 at 10:28
1
1
$begingroup$
Do you even need to return anything?
$endgroup$
– ceilingcat
May 20 at 14:11
$begingroup$
Do you even need to return anything?
$endgroup$
– ceilingcat
May 20 at 14:11
$begingroup$
63 bytes
$endgroup$
– Johan du Toit
May 21 at 10:28
$begingroup$
63 bytes
$endgroup$
– Johan du Toit
May 21 at 10:28
add a comment |
$begingroup$
Wolfram Language (Mathematica), 28 21 bytes
-7: No longer requires falsy (False
) value on empty input
Partition[#,3,1,1,_]&
Try it online!
Takes a list of characters as input. Returns a list of 3-tuples of characters padded with Blank
s (_
).
34 27 bytes
StringPartition[#<>"__",3]&
Try it online!
String input, list of strings output
$endgroup$
add a comment |
$begingroup$
Wolfram Language (Mathematica), 28 21 bytes
-7: No longer requires falsy (False
) value on empty input
Partition[#,3,1,1,_]&
Try it online!
Takes a list of characters as input. Returns a list of 3-tuples of characters padded with Blank
s (_
).
34 27 bytes
StringPartition[#<>"__",3]&
Try it online!
String input, list of strings output
$endgroup$
add a comment |
$begingroup$
Wolfram Language (Mathematica), 28 21 bytes
-7: No longer requires falsy (False
) value on empty input
Partition[#,3,1,1,_]&
Try it online!
Takes a list of characters as input. Returns a list of 3-tuples of characters padded with Blank
s (_
).
34 27 bytes
StringPartition[#<>"__",3]&
Try it online!
String input, list of strings output
$endgroup$
Wolfram Language (Mathematica), 28 21 bytes
-7: No longer requires falsy (False
) value on empty input
Partition[#,3,1,1,_]&
Try it online!
Takes a list of characters as input. Returns a list of 3-tuples of characters padded with Blank
s (_
).
34 27 bytes
StringPartition[#<>"__",3]&
Try it online!
String input, list of strings output
edited May 26 at 6:40
answered May 19 at 22:56
attinatattinat
1,6072 silver badges9 bronze badges
1,6072 silver badges9 bronze badges
add a comment |
add a comment |
$begingroup$
Jelly, 9 bytes
s3o€“___”
A monadic Link accepting a list of characters which yields a list of lists of characters (an empty input yields empty output).
Try it online!
How?
s3o€“___” - Link: list of characters
s3 - split into chunks of three
€ - for each chunk:
o - OR (vectorises):
“___” - list of characters = ['_', '_', '_']
Notes:
The €
is only necessary to handle the edge case of an empty input.
A full program can drop a trailing ”
, but here we can't do that as the printing behaviour of a full program smashes everything together.
Equivalent 9:
o3ÐƤ“___”
Try it
Alternative 9:
;“___”s3Ṗ
Try it
$endgroup$
add a comment |
$begingroup$
Jelly, 9 bytes
s3o€“___”
A monadic Link accepting a list of characters which yields a list of lists of characters (an empty input yields empty output).
Try it online!
How?
s3o€“___” - Link: list of characters
s3 - split into chunks of three
€ - for each chunk:
o - OR (vectorises):
“___” - list of characters = ['_', '_', '_']
Notes:
The €
is only necessary to handle the edge case of an empty input.
A full program can drop a trailing ”
, but here we can't do that as the printing behaviour of a full program smashes everything together.
Equivalent 9:
o3ÐƤ“___”
Try it
Alternative 9:
;“___”s3Ṗ
Try it
$endgroup$
add a comment |
$begingroup$
Jelly, 9 bytes
s3o€“___”
A monadic Link accepting a list of characters which yields a list of lists of characters (an empty input yields empty output).
Try it online!
How?
s3o€“___” - Link: list of characters
s3 - split into chunks of three
€ - for each chunk:
o - OR (vectorises):
“___” - list of characters = ['_', '_', '_']
Notes:
The €
is only necessary to handle the edge case of an empty input.
A full program can drop a trailing ”
, but here we can't do that as the printing behaviour of a full program smashes everything together.
Equivalent 9:
o3ÐƤ“___”
Try it
Alternative 9:
;“___”s3Ṗ
Try it
$endgroup$
Jelly, 9 bytes
s3o€“___”
A monadic Link accepting a list of characters which yields a list of lists of characters (an empty input yields empty output).
Try it online!
How?
s3o€“___” - Link: list of characters
s3 - split into chunks of three
€ - for each chunk:
o - OR (vectorises):
“___” - list of characters = ['_', '_', '_']
Notes:
The €
is only necessary to handle the edge case of an empty input.
A full program can drop a trailing ”
, but here we can't do that as the printing behaviour of a full program smashes everything together.
Equivalent 9:
o3ÐƤ“___”
Try it
Alternative 9:
;“___”s3Ṗ
Try it
edited May 19 at 19:46
answered May 19 at 19:28
Jonathan AllanJonathan Allan
57.6k5 gold badges43 silver badges181 bronze badges
57.6k5 gold badges43 silver badges181 bronze badges
add a comment |
add a comment |
$begingroup$
J, 16 bytes
[:}:_3]'___',~]
Try it online!
K (oK), 19 17 bytes
-2 bytes thanks to ngn!
{-1_0N 3#x,"___"}
Try it online!
$endgroup$
1
$begingroup$
k:(0N;3)
->0N 3
$endgroup$
– ngn
May 20 at 7:21
$begingroup$
@ngn Thank you!
$endgroup$
– Galen Ivanov
May 20 at 7:28
add a comment |
$begingroup$
J, 16 bytes
[:}:_3]'___',~]
Try it online!
K (oK), 19 17 bytes
-2 bytes thanks to ngn!
{-1_0N 3#x,"___"}
Try it online!
$endgroup$
1
$begingroup$
k:(0N;3)
->0N 3
$endgroup$
– ngn
May 20 at 7:21
$begingroup$
@ngn Thank you!
$endgroup$
– Galen Ivanov
May 20 at 7:28
add a comment |
$begingroup$
J, 16 bytes
[:}:_3]'___',~]
Try it online!
K (oK), 19 17 bytes
-2 bytes thanks to ngn!
{-1_0N 3#x,"___"}
Try it online!
$endgroup$
J, 16 bytes
[:}:_3]'___',~]
Try it online!
K (oK), 19 17 bytes
-2 bytes thanks to ngn!
{-1_0N 3#x,"___"}
Try it online!
edited May 20 at 7:22
answered May 20 at 6:41
Galen IvanovGalen Ivanov
8,8771 gold badge12 silver badges37 bronze badges
8,8771 gold badge12 silver badges37 bronze badges
1
$begingroup$
k:(0N;3)
->0N 3
$endgroup$
– ngn
May 20 at 7:21
$begingroup$
@ngn Thank you!
$endgroup$
– Galen Ivanov
May 20 at 7:28
add a comment |
1
$begingroup$
k:(0N;3)
->0N 3
$endgroup$
– ngn
May 20 at 7:21
$begingroup$
@ngn Thank you!
$endgroup$
– Galen Ivanov
May 20 at 7:28
1
1
$begingroup$
k:
(0N;3)
-> 0N 3
$endgroup$
– ngn
May 20 at 7:21
$begingroup$
k:
(0N;3)
-> 0N 3
$endgroup$
– ngn
May 20 at 7:21
$begingroup$
@ngn Thank you!
$endgroup$
– Galen Ivanov
May 20 at 7:28
$begingroup$
@ngn Thank you!
$endgroup$
– Galen Ivanov
May 20 at 7:28
add a comment |
$begingroup$
Java 10, 116 113 bytes
s->{s+="__";int l=s.length()/3,i=l;var r=new String[l];for(;i-->0;)r[i]=s.substring(i*3,i*3+3);return l<1?0>1:r;}
Try it online.
Or 104 101 bytes if an empty array instead of false
is allowed as output..
s->{s+="__";int l=s.length()/3;var r=new String[l];for(;l-->0;)r[l]=s.substring(l*3,l*3+3);return r;}
Try it online.
Explanation:
s->{ // Method with String as both parameter and return-type
s+="__"; // Append two "_" to the input-String
int l=s.length()/3; // Get the length, integer-divided by 3
var r=new String[l]; // Create a string-array with that many parts
for(;l-->0;) // Loop `l` in the range (l, 0]:
r[l]= // Set the `l`'th value of the array to:
s.substring(l*3,l*3+3); // Get the substring of size 3 from index `l*3` from `s`
return r;} // Return the array
$endgroup$
$begingroup$
An empty array is now allowed
$endgroup$
– Benjamin Urquhart
May 26 at 3:57
add a comment |
$begingroup$
Java 10, 116 113 bytes
s->{s+="__";int l=s.length()/3,i=l;var r=new String[l];for(;i-->0;)r[i]=s.substring(i*3,i*3+3);return l<1?0>1:r;}
Try it online.
Or 104 101 bytes if an empty array instead of false
is allowed as output..
s->{s+="__";int l=s.length()/3;var r=new String[l];for(;l-->0;)r[l]=s.substring(l*3,l*3+3);return r;}
Try it online.
Explanation:
s->{ // Method with String as both parameter and return-type
s+="__"; // Append two "_" to the input-String
int l=s.length()/3; // Get the length, integer-divided by 3
var r=new String[l]; // Create a string-array with that many parts
for(;l-->0;) // Loop `l` in the range (l, 0]:
r[l]= // Set the `l`'th value of the array to:
s.substring(l*3,l*3+3); // Get the substring of size 3 from index `l*3` from `s`
return r;} // Return the array
$endgroup$
$begingroup$
An empty array is now allowed
$endgroup$
– Benjamin Urquhart
May 26 at 3:57
add a comment |
$begingroup$
Java 10, 116 113 bytes
s->{s+="__";int l=s.length()/3,i=l;var r=new String[l];for(;i-->0;)r[i]=s.substring(i*3,i*3+3);return l<1?0>1:r;}
Try it online.
Or 104 101 bytes if an empty array instead of false
is allowed as output..
s->{s+="__";int l=s.length()/3;var r=new String[l];for(;l-->0;)r[l]=s.substring(l*3,l*3+3);return r;}
Try it online.
Explanation:
s->{ // Method with String as both parameter and return-type
s+="__"; // Append two "_" to the input-String
int l=s.length()/3; // Get the length, integer-divided by 3
var r=new String[l]; // Create a string-array with that many parts
for(;l-->0;) // Loop `l` in the range (l, 0]:
r[l]= // Set the `l`'th value of the array to:
s.substring(l*3,l*3+3); // Get the substring of size 3 from index `l*3` from `s`
return r;} // Return the array
$endgroup$
Java 10, 116 113 bytes
s->{s+="__";int l=s.length()/3,i=l;var r=new String[l];for(;i-->0;)r[i]=s.substring(i*3,i*3+3);return l<1?0>1:r;}
Try it online.
Or 104 101 bytes if an empty array instead of false
is allowed as output..
s->{s+="__";int l=s.length()/3;var r=new String[l];for(;l-->0;)r[l]=s.substring(l*3,l*3+3);return r;}
Try it online.
Explanation:
s->{ // Method with String as both parameter and return-type
s+="__"; // Append two "_" to the input-String
int l=s.length()/3; // Get the length, integer-divided by 3
var r=new String[l]; // Create a string-array with that many parts
for(;l-->0;) // Loop `l` in the range (l, 0]:
r[l]= // Set the `l`'th value of the array to:
s.substring(l*3,l*3+3); // Get the substring of size 3 from index `l*3` from `s`
return r;} // Return the array
answered May 20 at 8:41
Kevin CruijssenKevin Cruijssen
47.9k7 gold badges83 silver badges241 bronze badges
47.9k7 gold badges83 silver badges241 bronze badges
$begingroup$
An empty array is now allowed
$endgroup$
– Benjamin Urquhart
May 26 at 3:57
add a comment |
$begingroup$
An empty array is now allowed
$endgroup$
– Benjamin Urquhart
May 26 at 3:57
$begingroup$
An empty array is now allowed
$endgroup$
– Benjamin Urquhart
May 26 at 3:57
$begingroup$
An empty array is now allowed
$endgroup$
– Benjamin Urquhart
May 26 at 3:57
add a comment |
$begingroup$
Ruby, 73 42 bytes
a=gets
a.length!=0?a.scan(/.{1,3}/).map{|s|(s+'_'*3)[0,3]}:'falsey value'
Edit: As falsey value looks like it's not required:
gets.scan(/.{1,3}/).map{|s|(s+'_'*3)[0,3]}
$endgroup$
1
$begingroup$
The maximum padding is of 2 characters, so'_'*2
would be enough, for which a literal'__'
is shorter. But if you add the padding in advance then simply not match the pieces shorter than 3 characters, is shorter:puts"#{gets}__".scan /.../
. (Note that without the explicit printing that is consideredirb
notruby
.)
$endgroup$
– manatwork
May 20 at 15:06
add a comment |
$begingroup$
Ruby, 73 42 bytes
a=gets
a.length!=0?a.scan(/.{1,3}/).map{|s|(s+'_'*3)[0,3]}:'falsey value'
Edit: As falsey value looks like it's not required:
gets.scan(/.{1,3}/).map{|s|(s+'_'*3)[0,3]}
$endgroup$
1
$begingroup$
The maximum padding is of 2 characters, so'_'*2
would be enough, for which a literal'__'
is shorter. But if you add the padding in advance then simply not match the pieces shorter than 3 characters, is shorter:puts"#{gets}__".scan /.../
. (Note that without the explicit printing that is consideredirb
notruby
.)
$endgroup$
– manatwork
May 20 at 15:06
add a comment |
$begingroup$
Ruby, 73 42 bytes
a=gets
a.length!=0?a.scan(/.{1,3}/).map{|s|(s+'_'*3)[0,3]}:'falsey value'
Edit: As falsey value looks like it's not required:
gets.scan(/.{1,3}/).map{|s|(s+'_'*3)[0,3]}
$endgroup$
Ruby, 73 42 bytes
a=gets
a.length!=0?a.scan(/.{1,3}/).map{|s|(s+'_'*3)[0,3]}:'falsey value'
Edit: As falsey value looks like it's not required:
gets.scan(/.{1,3}/).map{|s|(s+'_'*3)[0,3]}
edited May 20 at 9:59
answered May 20 at 9:53
Max LangerakMax Langerak
1113 bronze badges
1113 bronze badges
1
$begingroup$
The maximum padding is of 2 characters, so'_'*2
would be enough, for which a literal'__'
is shorter. But if you add the padding in advance then simply not match the pieces shorter than 3 characters, is shorter:puts"#{gets}__".scan /.../
. (Note that without the explicit printing that is consideredirb
notruby
.)
$endgroup$
– manatwork
May 20 at 15:06
add a comment |
1
$begingroup$
The maximum padding is of 2 characters, so'_'*2
would be enough, for which a literal'__'
is shorter. But if you add the padding in advance then simply not match the pieces shorter than 3 characters, is shorter:puts"#{gets}__".scan /.../
. (Note that without the explicit printing that is consideredirb
notruby
.)
$endgroup$
– manatwork
May 20 at 15:06
1
1
$begingroup$
The maximum padding is of 2 characters, so
'_'*2
would be enough, for which a literal '__'
is shorter. But if you add the padding in advance then simply not match the pieces shorter than 3 characters, is shorter: puts"#{gets}__".scan /.../
. (Note that without the explicit printing that is considered irb
not ruby
.)$endgroup$
– manatwork
May 20 at 15:06
$begingroup$
The maximum padding is of 2 characters, so
'_'*2
would be enough, for which a literal '__'
is shorter. But if you add the padding in advance then simply not match the pieces shorter than 3 characters, is shorter: puts"#{gets}__".scan /.../
. (Note that without the explicit printing that is considered irb
not ruby
.)$endgroup$
– manatwork
May 20 at 15:06
add a comment |
$begingroup$
C# (Visual C# Interactive Compiler), 74 bytes
Just append two underscores '_' at the end of the input to make sure they get printed if the length of the input isn't a factor of 3.
s=>Enumerable.Range(0,(s.Length+2)/3).Select(i=>(s+"__").Substring(i*3,3))
Try it online!
$endgroup$
$begingroup$
67
$endgroup$
– dana
May 22 at 5:20
$begingroup$
57
$endgroup$
– someone
May 25 at 1:22
add a comment |
$begingroup$
C# (Visual C# Interactive Compiler), 74 bytes
Just append two underscores '_' at the end of the input to make sure they get printed if the length of the input isn't a factor of 3.
s=>Enumerable.Range(0,(s.Length+2)/3).Select(i=>(s+"__").Substring(i*3,3))
Try it online!
$endgroup$
$begingroup$
67
$endgroup$
– dana
May 22 at 5:20
$begingroup$
57
$endgroup$
– someone
May 25 at 1:22
add a comment |
$begingroup$
C# (Visual C# Interactive Compiler), 74 bytes
Just append two underscores '_' at the end of the input to make sure they get printed if the length of the input isn't a factor of 3.
s=>Enumerable.Range(0,(s.Length+2)/3).Select(i=>(s+"__").Substring(i*3,3))
Try it online!
$endgroup$
C# (Visual C# Interactive Compiler), 74 bytes
Just append two underscores '_' at the end of the input to make sure they get printed if the length of the input isn't a factor of 3.
s=>Enumerable.Range(0,(s.Length+2)/3).Select(i=>(s+"__").Substring(i*3,3))
Try it online!
answered May 20 at 12:01
Innat3Innat3
5716 bronze badges
5716 bronze badges
$begingroup$
67
$endgroup$
– dana
May 22 at 5:20
$begingroup$
57
$endgroup$
– someone
May 25 at 1:22
add a comment |
$begingroup$
67
$endgroup$
– dana
May 22 at 5:20
$begingroup$
57
$endgroup$
– someone
May 25 at 1:22
$begingroup$
67
$endgroup$
– dana
May 22 at 5:20
$begingroup$
67
$endgroup$
– dana
May 22 at 5:20
$begingroup$
57
$endgroup$
– someone
May 25 at 1:22
$begingroup$
57
$endgroup$
– someone
May 25 at 1:22
add a comment |
$begingroup$
Kotlin, 34 bytes
{"${it}__".chunked(3).dropLast(1)}
Try it online!
$endgroup$
$begingroup$
this does not work, try{"${it}___".chunked(3).dropLast(1)}
$endgroup$
– pme
May 21 at 6:45
add a comment |
$begingroup$
Kotlin, 34 bytes
{"${it}__".chunked(3).dropLast(1)}
Try it online!
$endgroup$
$begingroup$
this does not work, try{"${it}___".chunked(3).dropLast(1)}
$endgroup$
– pme
May 21 at 6:45
add a comment |
$begingroup$
Kotlin, 34 bytes
{"${it}__".chunked(3).dropLast(1)}
Try it online!
$endgroup$
Kotlin, 34 bytes
{"${it}__".chunked(3).dropLast(1)}
Try it online!
answered May 20 at 15:16
snail_snail_
1,7525 silver badges15 bronze badges
1,7525 silver badges15 bronze badges
$begingroup$
this does not work, try{"${it}___".chunked(3).dropLast(1)}
$endgroup$
– pme
May 21 at 6:45
add a comment |
$begingroup$
this does not work, try{"${it}___".chunked(3).dropLast(1)}
$endgroup$
– pme
May 21 at 6:45
$begingroup$
this does not work, try
{"${it}___".chunked(3).dropLast(1)}
$endgroup$
– pme
May 21 at 6:45
$begingroup$
this does not work, try
{"${it}___".chunked(3).dropLast(1)}
$endgroup$
– pme
May 21 at 6:45
add a comment |
$begingroup$
C (gcc), 55 bytes
i;f(char*s){for(;i%4|*s;)putchar(++i%4?*s?*s++:95:10);}
Try it online!
$endgroup$
$begingroup$
Using 9(t
) instead of 10(n
) should be fine, but that's not main point
$endgroup$
– l4m2
May 20 at 15:23
add a comment |
$begingroup$
C (gcc), 55 bytes
i;f(char*s){for(;i%4|*s;)putchar(++i%4?*s?*s++:95:10);}
Try it online!
$endgroup$
$begingroup$
Using 9(t
) instead of 10(n
) should be fine, but that's not main point
$endgroup$
– l4m2
May 20 at 15:23
add a comment |
$begingroup$
C (gcc), 55 bytes
i;f(char*s){for(;i%4|*s;)putchar(++i%4?*s?*s++:95:10);}
Try it online!
$endgroup$
C (gcc), 55 bytes
i;f(char*s){for(;i%4|*s;)putchar(++i%4?*s?*s++:95:10);}
Try it online!
edited May 20 at 15:41
answered May 20 at 15:22
l4m2l4m2
4,8771 gold badge8 silver badges35 bronze badges
4,8771 gold badge8 silver badges35 bronze badges
$begingroup$
Using 9(t
) instead of 10(n
) should be fine, but that's not main point
$endgroup$
– l4m2
May 20 at 15:23
add a comment |
$begingroup$
Using 9(t
) instead of 10(n
) should be fine, but that's not main point
$endgroup$
– l4m2
May 20 at 15:23
$begingroup$
Using 9(
t
) instead of 10(n
) should be fine, but that's not main point$endgroup$
– l4m2
May 20 at 15:23
$begingroup$
Using 9(
t
) instead of 10(n
) should be fine, but that's not main point$endgroup$
– l4m2
May 20 at 15:23
add a comment |
$begingroup$
C (clang), 128 126 94 67 bytes
67 bytes thanks to @ceilingcat
f(char*k){for(;*k;k++)printf("%c%c%cn",*k,*++k?*k:95,*++k?*k:95);}
Try it online!
$endgroup$
add a comment |
$begingroup$
C (clang), 128 126 94 67 bytes
67 bytes thanks to @ceilingcat
f(char*k){for(;*k;k++)printf("%c%c%cn",*k,*++k?*k:95,*++k?*k:95);}
Try it online!
$endgroup$
add a comment |
$begingroup$
C (clang), 128 126 94 67 bytes
67 bytes thanks to @ceilingcat
f(char*k){for(;*k;k++)printf("%c%c%cn",*k,*++k?*k:95,*++k?*k:95);}
Try it online!
$endgroup$
C (clang), 128 126 94 67 bytes
67 bytes thanks to @ceilingcat
f(char*k){for(;*k;k++)printf("%c%c%cn",*k,*++k?*k:95,*++k?*k:95);}
Try it online!
edited May 21 at 0:04
answered May 19 at 16:31
a stone arachnida stone arachnid
9932 silver badges13 bronze badges
9932 silver badges13 bronze badges
add a comment |
add a comment |
$begingroup$
Bash, 90 bytes
This uses Bash features rather than a combination of more traditional Bourne shell plus *nix commands (which one version I created ended up at 205 bytes). I cheated by using the dodge of adding two _ characters to the string.
c=;read a;a=${a}__;while (($(echo ${#a})>2));do b=${a:0:3};c=$c $b;a=${a#$b};done;echo $c
Try it online!
$endgroup$
add a comment |
$begingroup$
Bash, 90 bytes
This uses Bash features rather than a combination of more traditional Bourne shell plus *nix commands (which one version I created ended up at 205 bytes). I cheated by using the dodge of adding two _ characters to the string.
c=;read a;a=${a}__;while (($(echo ${#a})>2));do b=${a:0:3};c=$c $b;a=${a#$b};done;echo $c
Try it online!
$endgroup$
add a comment |
$begingroup$
Bash, 90 bytes
This uses Bash features rather than a combination of more traditional Bourne shell plus *nix commands (which one version I created ended up at 205 bytes). I cheated by using the dodge of adding two _ characters to the string.
c=;read a;a=${a}__;while (($(echo ${#a})>2));do b=${a:0:3};c=$c $b;a=${a#$b};done;echo $c
Try it online!
$endgroup$
Bash, 90 bytes
This uses Bash features rather than a combination of more traditional Bourne shell plus *nix commands (which one version I created ended up at 205 bytes). I cheated by using the dodge of adding two _ characters to the string.
c=;read a;a=${a}__;while (($(echo ${#a})>2));do b=${a:0:3};c=$c $b;a=${a#$b};done;echo $c
Try it online!
answered May 21 at 14:52
PJFPJF
713 bronze badges
713 bronze badges
add a comment |
add a comment |
$begingroup$
PowerShell, 58 35 bytes
$args-split'(...)'-ne''|% *ht 3 '_'
-23 bytes thanks to mazzy.
Try it online!
$endgroup$
$begingroup$
Nice. 1) You can count a code that can be extracted into a ps1-file and executed. 2) See shortcuts. 3) Try to golf more
$endgroup$
– mazzy
May 25 at 5:18
add a comment |
$begingroup$
PowerShell, 58 35 bytes
$args-split'(...)'-ne''|% *ht 3 '_'
-23 bytes thanks to mazzy.
Try it online!
$endgroup$
$begingroup$
Nice. 1) You can count a code that can be extracted into a ps1-file and executed. 2) See shortcuts. 3) Try to golf more
$endgroup$
– mazzy
May 25 at 5:18
add a comment |
$begingroup$
PowerShell, 58 35 bytes
$args-split'(...)'-ne''|% *ht 3 '_'
-23 bytes thanks to mazzy.
Try it online!
$endgroup$
PowerShell, 58 35 bytes
$args-split'(...)'-ne''|% *ht 3 '_'
-23 bytes thanks to mazzy.
Try it online!
edited May 25 at 5:15
answered May 24 at 21:22
Andrei OdegovAndrei Odegov
7193 silver badges6 bronze badges
7193 silver badges6 bronze badges
$begingroup$
Nice. 1) You can count a code that can be extracted into a ps1-file and executed. 2) See shortcuts. 3) Try to golf more
$endgroup$
– mazzy
May 25 at 5:18
add a comment |
$begingroup$
Nice. 1) You can count a code that can be extracted into a ps1-file and executed. 2) See shortcuts. 3) Try to golf more
$endgroup$
– mazzy
May 25 at 5:18
$begingroup$
Nice. 1) You can count a code that can be extracted into a ps1-file and executed. 2) See shortcuts. 3) Try to golf more
$endgroup$
– mazzy
May 25 at 5:18
$begingroup$
Nice. 1) You can count a code that can be extracted into a ps1-file and executed. 2) See shortcuts. 3) Try to golf more
$endgroup$
– mazzy
May 25 at 5:18
add a comment |
$begingroup$
GNU sed, 27 bytes
s:$:__:
s:...:& :g
s: _*$::
Try it online!
It gets a bit tricky regarding the empty string input, since sed has no meaning of a falsy value. So to deal with this, I provide you with two possible interpretations of the rules to validate my submission:
A. You essentially provide nothing as input, not even a trailing newline (as it is the case with all the examples, including that 6 Mb file).
Usage:
echo -n ""|sed -f script
Output: nothing is printed, because sed doesn't even run the script without input.
B. One could consider as falsy value for sed to be an unique string, i.e., returned only when the input is an empty string.
Usage:
echo ""|sed -f script
Output:
__
I prefer the first interpretation so much more, as I believe it to be the closest to the intended rule, but the last one helps if you run the script using that TIO link.
$endgroup$
add a comment |
$begingroup$
GNU sed, 27 bytes
s:$:__:
s:...:& :g
s: _*$::
Try it online!
It gets a bit tricky regarding the empty string input, since sed has no meaning of a falsy value. So to deal with this, I provide you with two possible interpretations of the rules to validate my submission:
A. You essentially provide nothing as input, not even a trailing newline (as it is the case with all the examples, including that 6 Mb file).
Usage:
echo -n ""|sed -f script
Output: nothing is printed, because sed doesn't even run the script without input.
B. One could consider as falsy value for sed to be an unique string, i.e., returned only when the input is an empty string.
Usage:
echo ""|sed -f script
Output:
__
I prefer the first interpretation so much more, as I believe it to be the closest to the intended rule, but the last one helps if you run the script using that TIO link.
$endgroup$
add a comment |
$begingroup$
GNU sed, 27 bytes
s:$:__:
s:...:& :g
s: _*$::
Try it online!
It gets a bit tricky regarding the empty string input, since sed has no meaning of a falsy value. So to deal with this, I provide you with two possible interpretations of the rules to validate my submission:
A. You essentially provide nothing as input, not even a trailing newline (as it is the case with all the examples, including that 6 Mb file).
Usage:
echo -n ""|sed -f script
Output: nothing is printed, because sed doesn't even run the script without input.
B. One could consider as falsy value for sed to be an unique string, i.e., returned only when the input is an empty string.
Usage:
echo ""|sed -f script
Output:
__
I prefer the first interpretation so much more, as I believe it to be the closest to the intended rule, but the last one helps if you run the script using that TIO link.
$endgroup$
GNU sed, 27 bytes
s:$:__:
s:...:& :g
s: _*$::
Try it online!
It gets a bit tricky regarding the empty string input, since sed has no meaning of a falsy value. So to deal with this, I provide you with two possible interpretations of the rules to validate my submission:
A. You essentially provide nothing as input, not even a trailing newline (as it is the case with all the examples, including that 6 Mb file).
Usage:
echo -n ""|sed -f script
Output: nothing is printed, because sed doesn't even run the script without input.
B. One could consider as falsy value for sed to be an unique string, i.e., returned only when the input is an empty string.
Usage:
echo ""|sed -f script
Output:
__
I prefer the first interpretation so much more, as I believe it to be the closest to the intended rule, but the last one helps if you run the script using that TIO link.
answered Jun 8 at 17:16
seshoumaraseshoumara
2,8271 gold badge4 silver badges23 bronze badges
2,8271 gold badge4 silver badges23 bronze badges
add a comment |
add a comment |
$begingroup$
JavaScript (Babel Node), 45 bytes
_=>_.match(/.{1,3}/g).map(a=>a.padEnd(3,`_`))
Try it online!
$endgroup$
$begingroup$
44
$endgroup$
– Shaggy
May 19 at 15:13
$begingroup$
Doesn't work for me
$endgroup$
– VFDan
May 22 at 21:55
add a comment |
$begingroup$
JavaScript (Babel Node), 45 bytes
_=>_.match(/.{1,3}/g).map(a=>a.padEnd(3,`_`))
Try it online!
$endgroup$
$begingroup$
44
$endgroup$
– Shaggy
May 19 at 15:13
$begingroup$
Doesn't work for me
$endgroup$
– VFDan
May 22 at 21:55
add a comment |
$begingroup$
JavaScript (Babel Node), 45 bytes
_=>_.match(/.{1,3}/g).map(a=>a.padEnd(3,`_`))
Try it online!
$endgroup$
JavaScript (Babel Node), 45 bytes
_=>_.match(/.{1,3}/g).map(a=>a.padEnd(3,`_`))
Try it online!
answered May 19 at 15:02
Luis felipe De jesus MunozLuis felipe De jesus Munoz
6,5262 gold badges18 silver badges74 bronze badges
6,5262 gold badges18 silver badges74 bronze badges
$begingroup$
44
$endgroup$
– Shaggy
May 19 at 15:13
$begingroup$
Doesn't work for me
$endgroup$
– VFDan
May 22 at 21:55
add a comment |
$begingroup$
44
$endgroup$
– Shaggy
May 19 at 15:13
$begingroup$
Doesn't work for me
$endgroup$
– VFDan
May 22 at 21:55
$begingroup$
44
$endgroup$
– Shaggy
May 19 at 15:13
$begingroup$
44
$endgroup$
– Shaggy
May 19 at 15:13
$begingroup$
Doesn't work for me
$endgroup$
– VFDan
May 22 at 21:55
$begingroup$
Doesn't work for me
$endgroup$
– VFDan
May 22 at 21:55
add a comment |
$begingroup$
Jelly, 10 bytes
s3;€⁾__ḣ€3
Try it online!
It feels like an 8 or 9 should be possible, but haven’t found one yet.
$endgroup$
add a comment |
$begingroup$
Jelly, 10 bytes
s3;€⁾__ḣ€3
Try it online!
It feels like an 8 or 9 should be possible, but haven’t found one yet.
$endgroup$
add a comment |
$begingroup$
Jelly, 10 bytes
s3;€⁾__ḣ€3
Try it online!
It feels like an 8 or 9 should be possible, but haven’t found one yet.
$endgroup$
Jelly, 10 bytes
s3;€⁾__ḣ€3
Try it online!
It feels like an 8 or 9 should be possible, but haven’t found one yet.
answered May 19 at 16:36
Nick KennedyNick Kennedy
4,9149 silver badges14 bronze badges
4,9149 silver badges14 bronze badges
add a comment |
add a comment |
$begingroup$
Attache, 34 23 bytes
PadRight&"_"&3=>@Chop&3
Try it online!
Explanation (outdated)
{On[#_-1,PadRight&"_"&3,_]}@Chop&3
@Chop&3 chop the input string into groups of 3s
{On[#_-1 ,_]} on the last group
,PadRight pad it
&3 to length three
&"_" with underscores
$endgroup$
$begingroup$
Would you save anything by padding all the elements instead of just the last one?
$endgroup$
– Shaggy
May 19 at 20:18
$begingroup$
@Shaggy Good point! I’ll look into it
$endgroup$
– Conor O'Brien
May 19 at 20:19
add a comment |
$begingroup$
Attache, 34 23 bytes
PadRight&"_"&3=>@Chop&3
Try it online!
Explanation (outdated)
{On[#_-1,PadRight&"_"&3,_]}@Chop&3
@Chop&3 chop the input string into groups of 3s
{On[#_-1 ,_]} on the last group
,PadRight pad it
&3 to length three
&"_" with underscores
$endgroup$
$begingroup$
Would you save anything by padding all the elements instead of just the last one?
$endgroup$
– Shaggy
May 19 at 20:18
$begingroup$
@Shaggy Good point! I’ll look into it
$endgroup$
– Conor O'Brien
May 19 at 20:19
add a comment |
$begingroup$
Attache, 34 23 bytes
PadRight&"_"&3=>@Chop&3
Try it online!
Explanation (outdated)
{On[#_-1,PadRight&"_"&3,_]}@Chop&3
@Chop&3 chop the input string into groups of 3s
{On[#_-1 ,_]} on the last group
,PadRight pad it
&3 to length three
&"_" with underscores
$endgroup$
Attache, 34 23 bytes
PadRight&"_"&3=>@Chop&3
Try it online!
Explanation (outdated)
{On[#_-1,PadRight&"_"&3,_]}@Chop&3
@Chop&3 chop the input string into groups of 3s
{On[#_-1 ,_]} on the last group
,PadRight pad it
&3 to length three
&"_" with underscores
edited May 19 at 22:18
answered May 19 at 19:47
Conor O'BrienConor O'Brien
31.1k2 gold badges66 silver badges162 bronze badges
31.1k2 gold badges66 silver badges162 bronze badges
$begingroup$
Would you save anything by padding all the elements instead of just the last one?
$endgroup$
– Shaggy
May 19 at 20:18
$begingroup$
@Shaggy Good point! I’ll look into it
$endgroup$
– Conor O'Brien
May 19 at 20:19
add a comment |
$begingroup$
Would you save anything by padding all the elements instead of just the last one?
$endgroup$
– Shaggy
May 19 at 20:18
$begingroup$
@Shaggy Good point! I’ll look into it
$endgroup$
– Conor O'Brien
May 19 at 20:19
$begingroup$
Would you save anything by padding all the elements instead of just the last one?
$endgroup$
– Shaggy
May 19 at 20:18
$begingroup$
Would you save anything by padding all the elements instead of just the last one?
$endgroup$
– Shaggy
May 19 at 20:18
$begingroup$
@Shaggy Good point! I’ll look into it
$endgroup$
– Conor O'Brien
May 19 at 20:19
$begingroup$
@Shaggy Good point! I’ll look into it
$endgroup$
– Conor O'Brien
May 19 at 20:19
add a comment |
$begingroup$
Charcoal, 10 bytes
E⪪S³…⁺ι__³
Try it online! Link is to verbose version of code. Explanation:
S Input string
⪪ ³ Split into groups of up to 3 characters
E Map over each group
ι Current group
⁺ Concatenated with
__ Literal `__`
… ³ Moulded to length 3
Each group implicitly printed on its own line
$endgroup$
add a comment |
$begingroup$
Charcoal, 10 bytes
E⪪S³…⁺ι__³
Try it online! Link is to verbose version of code. Explanation:
S Input string
⪪ ³ Split into groups of up to 3 characters
E Map over each group
ι Current group
⁺ Concatenated with
__ Literal `__`
… ³ Moulded to length 3
Each group implicitly printed on its own line
$endgroup$
add a comment |
$begingroup$
Charcoal, 10 bytes
E⪪S³…⁺ι__³
Try it online! Link is to verbose version of code. Explanation:
S Input string
⪪ ³ Split into groups of up to 3 characters
E Map over each group
ι Current group
⁺ Concatenated with
__ Literal `__`
… ³ Moulded to length 3
Each group implicitly printed on its own line
$endgroup$
Charcoal, 10 bytes
E⪪S³…⁺ι__³
Try it online! Link is to verbose version of code. Explanation:
S Input string
⪪ ³ Split into groups of up to 3 characters
E Map over each group
ι Current group
⁺ Concatenated with
__ Literal `__`
… ³ Moulded to length 3
Each group implicitly printed on its own line
answered May 19 at 22:31
NeilNeil
86.3k8 gold badges46 silver badges183 bronze badges
86.3k8 gold badges46 silver badges183 bronze badges
add a comment |
add a comment |
$begingroup$
Scala, 31 bytes
(s+"___").grouped(3).toSeq.init
Try it online!
Explanation
(s+"___") // add "___"
.grouped(3) // make groups of 3
.toSeq // change to Seq
.init // take all but last
$endgroup$
add a comment |
$begingroup$
Scala, 31 bytes
(s+"___").grouped(3).toSeq.init
Try it online!
Explanation
(s+"___") // add "___"
.grouped(3) // make groups of 3
.toSeq // change to Seq
.init // take all but last
$endgroup$
add a comment |
$begingroup$
Scala, 31 bytes
(s+"___").grouped(3).toSeq.init
Try it online!
Explanation
(s+"___") // add "___"
.grouped(3) // make groups of 3
.toSeq // change to Seq
.init // take all but last
$endgroup$
Scala, 31 bytes
(s+"___").grouped(3).toSeq.init
Try it online!
Explanation
(s+"___") // add "___"
.grouped(3) // make groups of 3
.toSeq // change to Seq
.init // take all but last
edited May 20 at 12:46
answered May 20 at 11:04
pmepme
1114 bronze badges
1114 bronze badges
add a comment |
add a comment |
$begingroup$
Befunge-93, 30 29 bytes
~:1+%,~:1+!"`"*+,~:1+!"`"*+,,
Try it online!
Outputs nothing for an empty input, otherwise outputs strings of length 3 separated by NUL characters.
Explanation:
~ Push character of input to stack
:1+ Duplicate input and add 1
% Modulo top 2 values of stack and push result
If input was -1 (end of stream), calculate -1%0 -> halt
Otherwise calculate input%(input+1) -> input
, Pop and output character
~ Push character of input to stack
:1+! Duplicate input, add 1 and perform logical NOT
"`"* Multiply by 96 (ASCII code for '`')
This returns 96 or 0 depending on the result of the NOT
+ Add the top 2 values from the stack and push the result
If the input was -1 (end of stream), pushes -1+96=95, or the ASCII code for '_'
Otherwise pushes input+0
, Pop and output character
~:1+!"`"*+, Same block again to handle the third character
, Output a NUL character (stack is empty, so popping from stack just returns 0)
The instruction pointer wraps around at the end, looping the entire line.
$endgroup$
add a comment |
$begingroup$
Befunge-93, 30 29 bytes
~:1+%,~:1+!"`"*+,~:1+!"`"*+,,
Try it online!
Outputs nothing for an empty input, otherwise outputs strings of length 3 separated by NUL characters.
Explanation:
~ Push character of input to stack
:1+ Duplicate input and add 1
% Modulo top 2 values of stack and push result
If input was -1 (end of stream), calculate -1%0 -> halt
Otherwise calculate input%(input+1) -> input
, Pop and output character
~ Push character of input to stack
:1+! Duplicate input, add 1 and perform logical NOT
"`"* Multiply by 96 (ASCII code for '`')
This returns 96 or 0 depending on the result of the NOT
+ Add the top 2 values from the stack and push the result
If the input was -1 (end of stream), pushes -1+96=95, or the ASCII code for '_'
Otherwise pushes input+0
, Pop and output character
~:1+!"`"*+, Same block again to handle the third character
, Output a NUL character (stack is empty, so popping from stack just returns 0)
The instruction pointer wraps around at the end, looping the entire line.
$endgroup$
add a comment |
$begingroup$
Befunge-93, 30 29 bytes
~:1+%,~:1+!"`"*+,~:1+!"`"*+,,
Try it online!
Outputs nothing for an empty input, otherwise outputs strings of length 3 separated by NUL characters.
Explanation:
~ Push character of input to stack
:1+ Duplicate input and add 1
% Modulo top 2 values of stack and push result
If input was -1 (end of stream), calculate -1%0 -> halt
Otherwise calculate input%(input+1) -> input
, Pop and output character
~ Push character of input to stack
:1+! Duplicate input, add 1 and perform logical NOT
"`"* Multiply by 96 (ASCII code for '`')
This returns 96 or 0 depending on the result of the NOT
+ Add the top 2 values from the stack and push the result
If the input was -1 (end of stream), pushes -1+96=95, or the ASCII code for '_'
Otherwise pushes input+0
, Pop and output character
~:1+!"`"*+, Same block again to handle the third character
, Output a NUL character (stack is empty, so popping from stack just returns 0)
The instruction pointer wraps around at the end, looping the entire line.
$endgroup$
Befunge-93, 30 29 bytes
~:1+%,~:1+!"`"*+,~:1+!"`"*+,,
Try it online!
Outputs nothing for an empty input, otherwise outputs strings of length 3 separated by NUL characters.
Explanation:
~ Push character of input to stack
:1+ Duplicate input and add 1
% Modulo top 2 values of stack and push result
If input was -1 (end of stream), calculate -1%0 -> halt
Otherwise calculate input%(input+1) -> input
, Pop and output character
~ Push character of input to stack
:1+! Duplicate input, add 1 and perform logical NOT
"`"* Multiply by 96 (ASCII code for '`')
This returns 96 or 0 depending on the result of the NOT
+ Add the top 2 values from the stack and push the result
If the input was -1 (end of stream), pushes -1+96=95, or the ASCII code for '_'
Otherwise pushes input+0
, Pop and output character
~:1+!"`"*+, Same block again to handle the third character
, Output a NUL character (stack is empty, so popping from stack just returns 0)
The instruction pointer wraps around at the end, looping the entire line.
edited May 22 at 21:18
answered May 22 at 16:44
negative sevennegative seven
1,0353 silver badges11 bronze badges
1,0353 silver badges11 bronze badges
add a comment |
add a comment |
1 2
next
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).
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%2f185783%2fsplit-into-three%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
10
$begingroup$
Why special case the empty string? May we choose which character to use for the padding?
$endgroup$
– Shaggy
May 19 at 14:49
12
$begingroup$
So the task is actually: Given a string, return a falsey value if it is empty, otherwise split it into groups of three, padding with underscores if necessary? Seems like an odd pair-up of two unrelated tasks (checking string length and splitting).
$endgroup$
– Adám
May 19 at 15:27
14
$begingroup$
Things to avoid: Exceptional edge cases. In this case, an empty string should returnan empty array or equivalent, not a falsey value
$endgroup$
– Jo King
May 19 at 22:05
6
$begingroup$
Lots of statically-typed languages cannot return more than one type from a function
$endgroup$
– Embodiment of Ignorance
May 19 at 23:30
4
$begingroup$
@manassehkatz Yes, but only in those languages. In some languages it makes solutions far more complicated, or even impossible (e.g statically typed languages).
$endgroup$
– Jo King
May 20 at 22:01