Split Mark's marks
up vote
21
down vote
favorite
Challenge
Mark is a student who receives his N
marks in a concatenated way in a one single line.
The challenge is to separate his marks, knowing that each mark can only be 0
or 1
or 2
or 3
or 4
or 5
or 6
or 7
or 8
or 9
or 10
.
Input
N
natural number and one line.
Output
A set of natural numbers.
Example
N, One line------------------> Set of marks
3, '843'---------------------> [8, 4, 3]
1, '0'-----------------------> [0]
2, '1010'--------------------> [10,10]
3, '1010'--------------------> [1,0,10] or [10,1,0]
4, '1010'--------------------> [1,0,1,0]
9, '23104441070'-------------> [2, 3, 10, 4, 4, 4, 10, 7, 0]
12,'499102102121103'---------> [4, 9, 9, 10, 2, 10, 2, 1, 2, 1, 10, 3]
5, '71061'-------------------> [7, 1, 0, 6, 1]
11,'476565010684'------------> [4, 7, 6, 5, 6, 5, 0, 10, 6, 8, 4]
4, '1306'--------------------> [1, 3, 0, 6]
9, '51026221084'-------------> [5, 10, 2, 6, 2, 2, 10, 8, 4]
14,'851089085685524'---------> [8, 5, 10, 8, 9, 0, 8, 5, 6, 8, 5, 5, 2, 4]
11,'110840867780'------------> [1, 10, 8, 4, 0, 8, 6, 7, 7, 8, 0]
9, '4359893510'--------------> [4, 3, 5, 9, 8, 9, 3, 5, 10]
7, '99153710'----------------> [9, 9, 1, 5, 3, 7, 10]
14,'886171092313495'---------> [8, 8, 6, 1, 7, 10, 9, 2, 3, 1, 3, 4, 9, 5]
2, '44'----------------------> [4, 4]
4, '9386'--------------------> [9, 3, 8, 6]
Rules
- When several outputs are possible give only one output.
- Only mark of value
10
is on two decimal, others are on one decimal. - The input and output can be given in any convenient format
- No need to handle invalid input
- Either a full program or a function are acceptable. If a function, you can return the output rather than printing it.
- If possible, please include a link to an online testing environment so other people can try out your code!
Standard loopholes are forbidden.- This is code-golf so all usual golfing rules apply, and the shortest code (in bytes) wins.
code-golf string array-manipulation
|
show 3 more comments
up vote
21
down vote
favorite
Challenge
Mark is a student who receives his N
marks in a concatenated way in a one single line.
The challenge is to separate his marks, knowing that each mark can only be 0
or 1
or 2
or 3
or 4
or 5
or 6
or 7
or 8
or 9
or 10
.
Input
N
natural number and one line.
Output
A set of natural numbers.
Example
N, One line------------------> Set of marks
3, '843'---------------------> [8, 4, 3]
1, '0'-----------------------> [0]
2, '1010'--------------------> [10,10]
3, '1010'--------------------> [1,0,10] or [10,1,0]
4, '1010'--------------------> [1,0,1,0]
9, '23104441070'-------------> [2, 3, 10, 4, 4, 4, 10, 7, 0]
12,'499102102121103'---------> [4, 9, 9, 10, 2, 10, 2, 1, 2, 1, 10, 3]
5, '71061'-------------------> [7, 1, 0, 6, 1]
11,'476565010684'------------> [4, 7, 6, 5, 6, 5, 0, 10, 6, 8, 4]
4, '1306'--------------------> [1, 3, 0, 6]
9, '51026221084'-------------> [5, 10, 2, 6, 2, 2, 10, 8, 4]
14,'851089085685524'---------> [8, 5, 10, 8, 9, 0, 8, 5, 6, 8, 5, 5, 2, 4]
11,'110840867780'------------> [1, 10, 8, 4, 0, 8, 6, 7, 7, 8, 0]
9, '4359893510'--------------> [4, 3, 5, 9, 8, 9, 3, 5, 10]
7, '99153710'----------------> [9, 9, 1, 5, 3, 7, 10]
14,'886171092313495'---------> [8, 8, 6, 1, 7, 10, 9, 2, 3, 1, 3, 4, 9, 5]
2, '44'----------------------> [4, 4]
4, '9386'--------------------> [9, 3, 8, 6]
Rules
- When several outputs are possible give only one output.
- Only mark of value
10
is on two decimal, others are on one decimal. - The input and output can be given in any convenient format
- No need to handle invalid input
- Either a full program or a function are acceptable. If a function, you can return the output rather than printing it.
- If possible, please include a link to an online testing environment so other people can try out your code!
Standard loopholes are forbidden.- This is code-golf so all usual golfing rules apply, and the shortest code (in bytes) wins.
code-golf string array-manipulation
Here's a Python snippet I used to get then, 'string'
pairs from the copypasted example text block:spl = [item.split('-')[0] for item in text.split('n')]
– Gigaflop
2 days ago
3
Plz some comments for down-votes...
– mdahmoune
yesterday
Downvotes don't require leaving comments for a reason. There is nothing that can be improved about this challenge.
– user202729
yesterday
So don't worry about it.
– user202729
yesterday
Are the outputs required to be in the same order as the input?
– Mnemonic
yesterday
|
show 3 more comments
up vote
21
down vote
favorite
up vote
21
down vote
favorite
Challenge
Mark is a student who receives his N
marks in a concatenated way in a one single line.
The challenge is to separate his marks, knowing that each mark can only be 0
or 1
or 2
or 3
or 4
or 5
or 6
or 7
or 8
or 9
or 10
.
Input
N
natural number and one line.
Output
A set of natural numbers.
Example
N, One line------------------> Set of marks
3, '843'---------------------> [8, 4, 3]
1, '0'-----------------------> [0]
2, '1010'--------------------> [10,10]
3, '1010'--------------------> [1,0,10] or [10,1,0]
4, '1010'--------------------> [1,0,1,0]
9, '23104441070'-------------> [2, 3, 10, 4, 4, 4, 10, 7, 0]
12,'499102102121103'---------> [4, 9, 9, 10, 2, 10, 2, 1, 2, 1, 10, 3]
5, '71061'-------------------> [7, 1, 0, 6, 1]
11,'476565010684'------------> [4, 7, 6, 5, 6, 5, 0, 10, 6, 8, 4]
4, '1306'--------------------> [1, 3, 0, 6]
9, '51026221084'-------------> [5, 10, 2, 6, 2, 2, 10, 8, 4]
14,'851089085685524'---------> [8, 5, 10, 8, 9, 0, 8, 5, 6, 8, 5, 5, 2, 4]
11,'110840867780'------------> [1, 10, 8, 4, 0, 8, 6, 7, 7, 8, 0]
9, '4359893510'--------------> [4, 3, 5, 9, 8, 9, 3, 5, 10]
7, '99153710'----------------> [9, 9, 1, 5, 3, 7, 10]
14,'886171092313495'---------> [8, 8, 6, 1, 7, 10, 9, 2, 3, 1, 3, 4, 9, 5]
2, '44'----------------------> [4, 4]
4, '9386'--------------------> [9, 3, 8, 6]
Rules
- When several outputs are possible give only one output.
- Only mark of value
10
is on two decimal, others are on one decimal. - The input and output can be given in any convenient format
- No need to handle invalid input
- Either a full program or a function are acceptable. If a function, you can return the output rather than printing it.
- If possible, please include a link to an online testing environment so other people can try out your code!
Standard loopholes are forbidden.- This is code-golf so all usual golfing rules apply, and the shortest code (in bytes) wins.
code-golf string array-manipulation
Challenge
Mark is a student who receives his N
marks in a concatenated way in a one single line.
The challenge is to separate his marks, knowing that each mark can only be 0
or 1
or 2
or 3
or 4
or 5
or 6
or 7
or 8
or 9
or 10
.
Input
N
natural number and one line.
Output
A set of natural numbers.
Example
N, One line------------------> Set of marks
3, '843'---------------------> [8, 4, 3]
1, '0'-----------------------> [0]
2, '1010'--------------------> [10,10]
3, '1010'--------------------> [1,0,10] or [10,1,0]
4, '1010'--------------------> [1,0,1,0]
9, '23104441070'-------------> [2, 3, 10, 4, 4, 4, 10, 7, 0]
12,'499102102121103'---------> [4, 9, 9, 10, 2, 10, 2, 1, 2, 1, 10, 3]
5, '71061'-------------------> [7, 1, 0, 6, 1]
11,'476565010684'------------> [4, 7, 6, 5, 6, 5, 0, 10, 6, 8, 4]
4, '1306'--------------------> [1, 3, 0, 6]
9, '51026221084'-------------> [5, 10, 2, 6, 2, 2, 10, 8, 4]
14,'851089085685524'---------> [8, 5, 10, 8, 9, 0, 8, 5, 6, 8, 5, 5, 2, 4]
11,'110840867780'------------> [1, 10, 8, 4, 0, 8, 6, 7, 7, 8, 0]
9, '4359893510'--------------> [4, 3, 5, 9, 8, 9, 3, 5, 10]
7, '99153710'----------------> [9, 9, 1, 5, 3, 7, 10]
14,'886171092313495'---------> [8, 8, 6, 1, 7, 10, 9, 2, 3, 1, 3, 4, 9, 5]
2, '44'----------------------> [4, 4]
4, '9386'--------------------> [9, 3, 8, 6]
Rules
- When several outputs are possible give only one output.
- Only mark of value
10
is on two decimal, others are on one decimal. - The input and output can be given in any convenient format
- No need to handle invalid input
- Either a full program or a function are acceptable. If a function, you can return the output rather than printing it.
- If possible, please include a link to an online testing environment so other people can try out your code!
Standard loopholes are forbidden.- This is code-golf so all usual golfing rules apply, and the shortest code (in bytes) wins.
code-golf string array-manipulation
code-golf string array-manipulation
edited 2 days ago
Giuseppe
16.1k31052
16.1k31052
asked 2 days ago
mdahmoune
1,3601723
1,3601723
Here's a Python snippet I used to get then, 'string'
pairs from the copypasted example text block:spl = [item.split('-')[0] for item in text.split('n')]
– Gigaflop
2 days ago
3
Plz some comments for down-votes...
– mdahmoune
yesterday
Downvotes don't require leaving comments for a reason. There is nothing that can be improved about this challenge.
– user202729
yesterday
So don't worry about it.
– user202729
yesterday
Are the outputs required to be in the same order as the input?
– Mnemonic
yesterday
|
show 3 more comments
Here's a Python snippet I used to get then, 'string'
pairs from the copypasted example text block:spl = [item.split('-')[0] for item in text.split('n')]
– Gigaflop
2 days ago
3
Plz some comments for down-votes...
– mdahmoune
yesterday
Downvotes don't require leaving comments for a reason. There is nothing that can be improved about this challenge.
– user202729
yesterday
So don't worry about it.
– user202729
yesterday
Are the outputs required to be in the same order as the input?
– Mnemonic
yesterday
Here's a Python snippet I used to get the
n, 'string'
pairs from the copypasted example text block: spl = [item.split('-')[0] for item in text.split('n')]
– Gigaflop
2 days ago
Here's a Python snippet I used to get the
n, 'string'
pairs from the copypasted example text block: spl = [item.split('-')[0] for item in text.split('n')]
– Gigaflop
2 days ago
3
3
Plz some comments for down-votes...
– mdahmoune
yesterday
Plz some comments for down-votes...
– mdahmoune
yesterday
Downvotes don't require leaving comments for a reason. There is nothing that can be improved about this challenge.
– user202729
yesterday
Downvotes don't require leaving comments for a reason. There is nothing that can be improved about this challenge.
– user202729
yesterday
So don't worry about it.
– user202729
yesterday
So don't worry about it.
– user202729
yesterday
Are the outputs required to be in the same order as the input?
– Mnemonic
yesterday
Are the outputs required to be in the same order as the input?
– Mnemonic
yesterday
|
show 3 more comments
16 Answers
16
active
oldest
votes
up vote
5
down vote
Perl 6, 25 bytes
->a,b{b~~/(10|.)**{a}/}
Try it online!
Anonymous code block that takes a number and a string and returns as a Match object.
Explanation:
->a,b{ } # Anonymous code block taking params a and b
b~~/ / # Match using b
(10|.) # 10 or a single digit
**{a} # Exactly a times, being greedy
add a comment |
up vote
5
down vote
Brachylog, 23 21 bytes
-2 bytes thanks to Fatalize
h~c.{ịℕ≤10&ịṫ?∧}ᵛ&t~l
Try it online!
The input is a pair [Line, N]
.
This is my first Brachylog program, so there is probably a lot room for improvement.
It is very slow when the length of the line > 7.
Explanation:
h~c.{ịℕ≤10&ịṫ?∧}ᵛ&t~l
h The first element in the input
~c is formed by concatenating
. the elements in the output array
.{ ∧}ᵛ AND For every element in the output array holds that
ị The element converted to an integer
ℕ is a natural number
≤10 and less than or equal to 10
&ịṫ? and it has no leading zeroes (*)
&t AND The second element of the input
~l is the length of the output
(*) ịṫ?
checks that there are no leading zeroes. It converts the string to integer and then back to string and compares to the original string.
You don't need to input the number as a string, just use an integer. This alleviates the need for all thoseị
and for the leading zero check:h~c.{ℕ≤10}ᵛ&t~l
. This is probably slower though as deconcatenation on integers must work even for unknown integers through constraints, which makes it inefficient.
– Fatalize
yesterday
(Also note that usingh
andt
to get the first/last element is more efficient than using∋
for both (which in most programs will not even work)).
– Fatalize
yesterday
@Fatalize I understood that the input line can contain leading zeroes, so it would not be possible to use an integer as the input.
– fergusq
yesterday
Right, that's annoying…
– Fatalize
yesterday
add a comment |
up vote
5
down vote
V, 17, 12 bytes
ÓòÀGjí1î
0
Try it online!
I was content with 17 bytes, but than 05AB1E came along with 13, and I couldn't let a challenge go unanswered. :D
Ó " Put each character on it's own line
ò " Recursively (repeat until an error happens)...
ÀG " Go to the "n"th line
j " Move down a line (this will error if there are exactly "n" lines)
í " Remove...
1 " a '1'
<0x93> " START THE MATCH HERE
î " a newline
<0x85> " END THE MATCH HERE
0 " a '0'
Hexdump:
00000000: 5cd3 f2c0 476a ed31 93ee 8530 ...Gj.1...0
Alternate solution:
ÓòÀGjç1î0/J
Unfortunately, this replaces 10
with 1 0
add a comment |
up vote
4
down vote
Ruby, 57 bytes
->n,m{m.sub!"10",?A while m[n];m.chars.map{|c|c.to_i 16}}
Try it online!
This may turn out to be not the golfiest approach, but it looks like a fun idea to temporarily substitute 10
for a hex A
, which incidentally is also a high mark (if we consider A-F grading system :))
add a comment |
up vote
4
down vote
Python 3, 47 bytes
lambda s,n:[*s.replace(b'1',b'n',len(s)-n)]
Try it online!
Takes the "one line" as a bytestring with raw bytes x00 - x09
. If it's not acceptable:
Python 3, 56 bytes
lambda s,n:[x-48for x in s.replace(b'10',b':',len(s)-n)]
Try it online!
Takes "one line" as bytestring.
add a comment |
up vote
4
down vote
JavaScript, 57 52 bytes
n=>g=s=>s[n]?g(s.replace(x=10,`x`)):[...s].map(eval)
Try It Online
add a comment |
up vote
4
down vote
Python 3, 71 68 59 bytes
down another 9 bytes thanks to ovs.
lambda n,s:[int(c,11)for c in s.replace('10','a',len(s)-n)]
Try it online!
I was iniitially trying to use str.partition()
recursively, but using replace
smacked me in the face not too long after. Can anyone improve on this?
Also, here's a TIO link that I used to make the test cases into something more copy/pasteable
1
-3 bytes: drop space between: [c
and'x' else
and10 for
– mdahmoune
2 days ago
@mdahmoune Thanks for noticing, I have a hard time remembering what can be squished together.
– Gigaflop
2 days ago
8
General rule of thumb: Basically anything except for two letters can be squished together. If you get a syntax error, add random spaces until it works :)
– Quintec
2 days ago
There are some exceptions such as<number>e
,<letter><number>
,f'
.
– user202729
2 days ago
3
59 bytes by replacing 10 with a and reading each character as a base 11 int:lambda n,s:[int(c,11)for c in s.replace('10','a',len(s)-n)]
.
– ovs
yesterday
|
show 1 more comment
up vote
3
down vote
Haskell, 98 bytes
n!x=[y|y<-s x,y==take n y]!!0
s('1':'0':x)=do y<-s x;[1:0:y,10:y]
s(x:y)=(read[x]:)<$>s y
s _=[]
Try it online or test all!
Explanation
The function s
does all possible splits, for example: "1010"
becomes [[1,0,1,0],[10,1,0],[1,0,10],[10,10]]
, note how the longest splits end up at the beginning (because 1:0:y
comes before 10:y
).
With that in mind, we can take all these values and filter the y
s out where y == take n y
which keeps also splits that are shorter than required. For example with 4
we leave the list the same [[1,0,1,0],[10,1,0],[1,0,10],[10,10]]
.
Now we can just get the first element in that list because the inputs will always be valid (eg. 5!"1010"
would give [1,0,1,0]
too, but we don't need to handle it).
Note: I somehow miscounted.. y==take n y
is the same length as length y==n
:S
add a comment |
up vote
3
down vote
Haskell, 68 bytes
n!('1':'0':x)|n-2<length x=10:(n-1)!x
n!(s:x)=read[s]:(n-1)!x
n!_=
Try it online!
Greedily take 10s as long as there are more digits than marks remaining.
add a comment |
up vote
2
down vote
Perl 5 -plF
, 39 bytes
$a=<>;$_="@F";s/1 0/10/ while$a-1<y/ //
Try it online!
add a comment |
up vote
2
down vote
Clean, 128 bytes
import StdEnv
@=[]
@['10':t]=[u++v\u<-[[10],[1,0]],v<- @t];@[h:t]=[[digitToInt h:v]\v<- @t]
?n l=hd[e\e<- @l|length e==n]
Try it online!
add a comment |
up vote
2
down vote
05AB1E, 13 bytes
.œsù.ΔïTÝÃJ¹Q
Try it online!
or as a Test Suite
Explanation
.œ # partitions of the first input
sù # of a length equal to the second input
.Δ # find the first partition that returns true when:
ï # each element is converted to integer
TÝÃ # and only numbers in [0 ... 10] are kept
J # then join it together
¹Q # and compare it to the first input for equality
add a comment |
up vote
2
down vote
JavaScript (Babel Node), 70 69 59 bytes
Takes input as (n)(line)
.
n=>s=>(a=s.match(/10|./g)).flatMap(x=>x>9&&!a[--n]?[1,0]:x)
Try it online!
Commented
n => s => // given n and s
(a = s.match(/10|./g)) // split s into marks; a '1' followed by a '0' is always
// interpreted as '10'
.flatMap(x => // for each mark x:
x > 9 && // if x = '10',
!a[--n] ? // then decrement n; if a[n] is undefined:
[1, 0] // yield [1, 0]
: // else:
x // yield the mark unchanged
) // end of flatMap()
JavaScript (ES6), 64 59 bytes
Saved 5 bytes thanks to @guest271314
Takes input as (n)(line)
.
n=>g=([...s])=>1/s[n]?g(eval(`[${s}]`.replace('1,0',10))):s
Try it online!
Commented
n => // main function, taking n
g = ([...s]) => // g = recursive function, taking s
// (which is either a string or an array)
1 / s[n] ? // if s[n] is defined (i.e. we have too many marks):
g( // do a recursive call to g:
eval( // build a new array by evaluating ...
`[${s}]` // ... the string representation of s where the
.replace('1,0', 10) // first occurrence of '1,0' is replaced with '10'
) // end of eval()
) // end of recursive call
: // else:
s // return s
Why the output for N=3 and line='1010' is with mixed types [ 1, 0, '10' ]?
– mdahmoune
2 days ago
s.match()
returns an array of strings but a"10"
may be split into[1,0]
(2 integers) in the callback function offlatMap()
.
– Arnauld
2 days ago
1
We can coerce everything to integers for +1 byte.
– Arnauld
2 days ago
59 byteseval(`[${s}]`.replace('1,0',10))
– guest271314
yesterday
@guest271314 Thanks! Nice catch.
– Arnauld
yesterday
add a comment |
up vote
2
down vote
Java (OpenJDK 8), 78 bytes
A nice one-liner using the streams API.
(n,l)->l.join(":",l.split("10",l.length()-n+1)).chars().map(i->i-48).toArray()
Try it online!
How it works
(n,l)-> // Lambda function taking int and string
l.join(":", // Join the following array with colons
l.split("10", // Split the original string on "10"...
l.length()-n+1)) // But limit the parts to the difference between the length
// and expected length, to only remove required number of 10s
.chars() // Convert to an intstream of codepoints
.map(i->i-48) // Remove 48 to get the numeric value of each codepoint
.toArray() // Return an int array
add a comment |
up vote
1
down vote
Red, 91 bytes
func[n s][while[n < length? s][replace s"10""a"]foreach c s[prin[either c =#"a"[10][c]""]]]
Try it online!
add a comment |
up vote
1
down vote
Jelly, 18 bytes
Ḍ⁵⁻ƊƝr1ŒpS‘⁼ɗƇḢk⁸Ḍ
Try it online!
add a comment |
16 Answers
16
active
oldest
votes
16 Answers
16
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
5
down vote
Perl 6, 25 bytes
->a,b{b~~/(10|.)**{a}/}
Try it online!
Anonymous code block that takes a number and a string and returns as a Match object.
Explanation:
->a,b{ } # Anonymous code block taking params a and b
b~~/ / # Match using b
(10|.) # 10 or a single digit
**{a} # Exactly a times, being greedy
add a comment |
up vote
5
down vote
Perl 6, 25 bytes
->a,b{b~~/(10|.)**{a}/}
Try it online!
Anonymous code block that takes a number and a string and returns as a Match object.
Explanation:
->a,b{ } # Anonymous code block taking params a and b
b~~/ / # Match using b
(10|.) # 10 or a single digit
**{a} # Exactly a times, being greedy
add a comment |
up vote
5
down vote
up vote
5
down vote
Perl 6, 25 bytes
->a,b{b~~/(10|.)**{a}/}
Try it online!
Anonymous code block that takes a number and a string and returns as a Match object.
Explanation:
->a,b{ } # Anonymous code block taking params a and b
b~~/ / # Match using b
(10|.) # 10 or a single digit
**{a} # Exactly a times, being greedy
Perl 6, 25 bytes
->a,b{b~~/(10|.)**{a}/}
Try it online!
Anonymous code block that takes a number and a string and returns as a Match object.
Explanation:
->a,b{ } # Anonymous code block taking params a and b
b~~/ / # Match using b
(10|.) # 10 or a single digit
**{a} # Exactly a times, being greedy
edited 2 days ago
answered 2 days ago
Jo King
19.8k245105
19.8k245105
add a comment |
add a comment |
up vote
5
down vote
Brachylog, 23 21 bytes
-2 bytes thanks to Fatalize
h~c.{ịℕ≤10&ịṫ?∧}ᵛ&t~l
Try it online!
The input is a pair [Line, N]
.
This is my first Brachylog program, so there is probably a lot room for improvement.
It is very slow when the length of the line > 7.
Explanation:
h~c.{ịℕ≤10&ịṫ?∧}ᵛ&t~l
h The first element in the input
~c is formed by concatenating
. the elements in the output array
.{ ∧}ᵛ AND For every element in the output array holds that
ị The element converted to an integer
ℕ is a natural number
≤10 and less than or equal to 10
&ịṫ? and it has no leading zeroes (*)
&t AND The second element of the input
~l is the length of the output
(*) ịṫ?
checks that there are no leading zeroes. It converts the string to integer and then back to string and compares to the original string.
You don't need to input the number as a string, just use an integer. This alleviates the need for all thoseị
and for the leading zero check:h~c.{ℕ≤10}ᵛ&t~l
. This is probably slower though as deconcatenation on integers must work even for unknown integers through constraints, which makes it inefficient.
– Fatalize
yesterday
(Also note that usingh
andt
to get the first/last element is more efficient than using∋
for both (which in most programs will not even work)).
– Fatalize
yesterday
@Fatalize I understood that the input line can contain leading zeroes, so it would not be possible to use an integer as the input.
– fergusq
yesterday
Right, that's annoying…
– Fatalize
yesterday
add a comment |
up vote
5
down vote
Brachylog, 23 21 bytes
-2 bytes thanks to Fatalize
h~c.{ịℕ≤10&ịṫ?∧}ᵛ&t~l
Try it online!
The input is a pair [Line, N]
.
This is my first Brachylog program, so there is probably a lot room for improvement.
It is very slow when the length of the line > 7.
Explanation:
h~c.{ịℕ≤10&ịṫ?∧}ᵛ&t~l
h The first element in the input
~c is formed by concatenating
. the elements in the output array
.{ ∧}ᵛ AND For every element in the output array holds that
ị The element converted to an integer
ℕ is a natural number
≤10 and less than or equal to 10
&ịṫ? and it has no leading zeroes (*)
&t AND The second element of the input
~l is the length of the output
(*) ịṫ?
checks that there are no leading zeroes. It converts the string to integer and then back to string and compares to the original string.
You don't need to input the number as a string, just use an integer. This alleviates the need for all thoseị
and for the leading zero check:h~c.{ℕ≤10}ᵛ&t~l
. This is probably slower though as deconcatenation on integers must work even for unknown integers through constraints, which makes it inefficient.
– Fatalize
yesterday
(Also note that usingh
andt
to get the first/last element is more efficient than using∋
for both (which in most programs will not even work)).
– Fatalize
yesterday
@Fatalize I understood that the input line can contain leading zeroes, so it would not be possible to use an integer as the input.
– fergusq
yesterday
Right, that's annoying…
– Fatalize
yesterday
add a comment |
up vote
5
down vote
up vote
5
down vote
Brachylog, 23 21 bytes
-2 bytes thanks to Fatalize
h~c.{ịℕ≤10&ịṫ?∧}ᵛ&t~l
Try it online!
The input is a pair [Line, N]
.
This is my first Brachylog program, so there is probably a lot room for improvement.
It is very slow when the length of the line > 7.
Explanation:
h~c.{ịℕ≤10&ịṫ?∧}ᵛ&t~l
h The first element in the input
~c is formed by concatenating
. the elements in the output array
.{ ∧}ᵛ AND For every element in the output array holds that
ị The element converted to an integer
ℕ is a natural number
≤10 and less than or equal to 10
&ịṫ? and it has no leading zeroes (*)
&t AND The second element of the input
~l is the length of the output
(*) ịṫ?
checks that there are no leading zeroes. It converts the string to integer and then back to string and compares to the original string.
Brachylog, 23 21 bytes
-2 bytes thanks to Fatalize
h~c.{ịℕ≤10&ịṫ?∧}ᵛ&t~l
Try it online!
The input is a pair [Line, N]
.
This is my first Brachylog program, so there is probably a lot room for improvement.
It is very slow when the length of the line > 7.
Explanation:
h~c.{ịℕ≤10&ịṫ?∧}ᵛ&t~l
h The first element in the input
~c is formed by concatenating
. the elements in the output array
.{ ∧}ᵛ AND For every element in the output array holds that
ị The element converted to an integer
ℕ is a natural number
≤10 and less than or equal to 10
&ịṫ? and it has no leading zeroes (*)
&t AND The second element of the input
~l is the length of the output
(*) ịṫ?
checks that there are no leading zeroes. It converts the string to integer and then back to string and compares to the original string.
edited yesterday
answered 2 days ago
fergusq
4,65211036
4,65211036
You don't need to input the number as a string, just use an integer. This alleviates the need for all thoseị
and for the leading zero check:h~c.{ℕ≤10}ᵛ&t~l
. This is probably slower though as deconcatenation on integers must work even for unknown integers through constraints, which makes it inefficient.
– Fatalize
yesterday
(Also note that usingh
andt
to get the first/last element is more efficient than using∋
for both (which in most programs will not even work)).
– Fatalize
yesterday
@Fatalize I understood that the input line can contain leading zeroes, so it would not be possible to use an integer as the input.
– fergusq
yesterday
Right, that's annoying…
– Fatalize
yesterday
add a comment |
You don't need to input the number as a string, just use an integer. This alleviates the need for all thoseị
and for the leading zero check:h~c.{ℕ≤10}ᵛ&t~l
. This is probably slower though as deconcatenation on integers must work even for unknown integers through constraints, which makes it inefficient.
– Fatalize
yesterday
(Also note that usingh
andt
to get the first/last element is more efficient than using∋
for both (which in most programs will not even work)).
– Fatalize
yesterday
@Fatalize I understood that the input line can contain leading zeroes, so it would not be possible to use an integer as the input.
– fergusq
yesterday
Right, that's annoying…
– Fatalize
yesterday
You don't need to input the number as a string, just use an integer. This alleviates the need for all those
ị
and for the leading zero check: h~c.{ℕ≤10}ᵛ&t~l
. This is probably slower though as deconcatenation on integers must work even for unknown integers through constraints, which makes it inefficient.– Fatalize
yesterday
You don't need to input the number as a string, just use an integer. This alleviates the need for all those
ị
and for the leading zero check: h~c.{ℕ≤10}ᵛ&t~l
. This is probably slower though as deconcatenation on integers must work even for unknown integers through constraints, which makes it inefficient.– Fatalize
yesterday
(Also note that using
h
and t
to get the first/last element is more efficient than using ∋
for both (which in most programs will not even work)).– Fatalize
yesterday
(Also note that using
h
and t
to get the first/last element is more efficient than using ∋
for both (which in most programs will not even work)).– Fatalize
yesterday
@Fatalize I understood that the input line can contain leading zeroes, so it would not be possible to use an integer as the input.
– fergusq
yesterday
@Fatalize I understood that the input line can contain leading zeroes, so it would not be possible to use an integer as the input.
– fergusq
yesterday
Right, that's annoying…
– Fatalize
yesterday
Right, that's annoying…
– Fatalize
yesterday
add a comment |
up vote
5
down vote
V, 17, 12 bytes
ÓòÀGjí1î
0
Try it online!
I was content with 17 bytes, but than 05AB1E came along with 13, and I couldn't let a challenge go unanswered. :D
Ó " Put each character on it's own line
ò " Recursively (repeat until an error happens)...
ÀG " Go to the "n"th line
j " Move down a line (this will error if there are exactly "n" lines)
í " Remove...
1 " a '1'
<0x93> " START THE MATCH HERE
î " a newline
<0x85> " END THE MATCH HERE
0 " a '0'
Hexdump:
00000000: 5cd3 f2c0 476a ed31 93ee 8530 ...Gj.1...0
Alternate solution:
ÓòÀGjç1î0/J
Unfortunately, this replaces 10
with 1 0
add a comment |
up vote
5
down vote
V, 17, 12 bytes
ÓòÀGjí1î
0
Try it online!
I was content with 17 bytes, but than 05AB1E came along with 13, and I couldn't let a challenge go unanswered. :D
Ó " Put each character on it's own line
ò " Recursively (repeat until an error happens)...
ÀG " Go to the "n"th line
j " Move down a line (this will error if there are exactly "n" lines)
í " Remove...
1 " a '1'
<0x93> " START THE MATCH HERE
î " a newline
<0x85> " END THE MATCH HERE
0 " a '0'
Hexdump:
00000000: 5cd3 f2c0 476a ed31 93ee 8530 ...Gj.1...0
Alternate solution:
ÓòÀGjç1î0/J
Unfortunately, this replaces 10
with 1 0
add a comment |
up vote
5
down vote
up vote
5
down vote
V, 17, 12 bytes
ÓòÀGjí1î
0
Try it online!
I was content with 17 bytes, but than 05AB1E came along with 13, and I couldn't let a challenge go unanswered. :D
Ó " Put each character on it's own line
ò " Recursively (repeat until an error happens)...
ÀG " Go to the "n"th line
j " Move down a line (this will error if there are exactly "n" lines)
í " Remove...
1 " a '1'
<0x93> " START THE MATCH HERE
î " a newline
<0x85> " END THE MATCH HERE
0 " a '0'
Hexdump:
00000000: 5cd3 f2c0 476a ed31 93ee 8530 ...Gj.1...0
Alternate solution:
ÓòÀGjç1î0/J
Unfortunately, this replaces 10
with 1 0
V, 17, 12 bytes
ÓòÀGjí1î
0
Try it online!
I was content with 17 bytes, but than 05AB1E came along with 13, and I couldn't let a challenge go unanswered. :D
Ó " Put each character on it's own line
ò " Recursively (repeat until an error happens)...
ÀG " Go to the "n"th line
j " Move down a line (this will error if there are exactly "n" lines)
í " Remove...
1 " a '1'
<0x93> " START THE MATCH HERE
î " a newline
<0x85> " END THE MATCH HERE
0 " a '0'
Hexdump:
00000000: 5cd3 f2c0 476a ed31 93ee 8530 ...Gj.1...0
Alternate solution:
ÓòÀGjç1î0/J
Unfortunately, this replaces 10
with 1 0
edited yesterday
answered 2 days ago
DJMcMayhem♦
40.7k11145307
40.7k11145307
add a comment |
add a comment |
up vote
4
down vote
Ruby, 57 bytes
->n,m{m.sub!"10",?A while m[n];m.chars.map{|c|c.to_i 16}}
Try it online!
This may turn out to be not the golfiest approach, but it looks like a fun idea to temporarily substitute 10
for a hex A
, which incidentally is also a high mark (if we consider A-F grading system :))
add a comment |
up vote
4
down vote
Ruby, 57 bytes
->n,m{m.sub!"10",?A while m[n];m.chars.map{|c|c.to_i 16}}
Try it online!
This may turn out to be not the golfiest approach, but it looks like a fun idea to temporarily substitute 10
for a hex A
, which incidentally is also a high mark (if we consider A-F grading system :))
add a comment |
up vote
4
down vote
up vote
4
down vote
Ruby, 57 bytes
->n,m{m.sub!"10",?A while m[n];m.chars.map{|c|c.to_i 16}}
Try it online!
This may turn out to be not the golfiest approach, but it looks like a fun idea to temporarily substitute 10
for a hex A
, which incidentally is also a high mark (if we consider A-F grading system :))
Ruby, 57 bytes
->n,m{m.sub!"10",?A while m[n];m.chars.map{|c|c.to_i 16}}
Try it online!
This may turn out to be not the golfiest approach, but it looks like a fun idea to temporarily substitute 10
for a hex A
, which incidentally is also a high mark (if we consider A-F grading system :))
answered 2 days ago
Kirill L.
3,3761118
3,3761118
add a comment |
add a comment |
up vote
4
down vote
Python 3, 47 bytes
lambda s,n:[*s.replace(b'1',b'n',len(s)-n)]
Try it online!
Takes the "one line" as a bytestring with raw bytes x00 - x09
. If it's not acceptable:
Python 3, 56 bytes
lambda s,n:[x-48for x in s.replace(b'10',b':',len(s)-n)]
Try it online!
Takes "one line" as bytestring.
add a comment |
up vote
4
down vote
Python 3, 47 bytes
lambda s,n:[*s.replace(b'1',b'n',len(s)-n)]
Try it online!
Takes the "one line" as a bytestring with raw bytes x00 - x09
. If it's not acceptable:
Python 3, 56 bytes
lambda s,n:[x-48for x in s.replace(b'10',b':',len(s)-n)]
Try it online!
Takes "one line" as bytestring.
add a comment |
up vote
4
down vote
up vote
4
down vote
Python 3, 47 bytes
lambda s,n:[*s.replace(b'1',b'n',len(s)-n)]
Try it online!
Takes the "one line" as a bytestring with raw bytes x00 - x09
. If it's not acceptable:
Python 3, 56 bytes
lambda s,n:[x-48for x in s.replace(b'10',b':',len(s)-n)]
Try it online!
Takes "one line" as bytestring.
Python 3, 47 bytes
lambda s,n:[*s.replace(b'1',b'n',len(s)-n)]
Try it online!
Takes the "one line" as a bytestring with raw bytes x00 - x09
. If it's not acceptable:
Python 3, 56 bytes
lambda s,n:[x-48for x in s.replace(b'10',b':',len(s)-n)]
Try it online!
Takes "one line" as bytestring.
answered yesterday
Bubbler
6,144759
6,144759
add a comment |
add a comment |
up vote
4
down vote
JavaScript, 57 52 bytes
n=>g=s=>s[n]?g(s.replace(x=10,`x`)):[...s].map(eval)
Try It Online
add a comment |
up vote
4
down vote
JavaScript, 57 52 bytes
n=>g=s=>s[n]?g(s.replace(x=10,`x`)):[...s].map(eval)
Try It Online
add a comment |
up vote
4
down vote
up vote
4
down vote
JavaScript, 57 52 bytes
n=>g=s=>s[n]?g(s.replace(x=10,`x`)):[...s].map(eval)
Try It Online
JavaScript, 57 52 bytes
n=>g=s=>s[n]?g(s.replace(x=10,`x`)):[...s].map(eval)
Try It Online
edited yesterday
answered 2 days ago
Shaggy
18.4k21663
18.4k21663
add a comment |
add a comment |
up vote
4
down vote
Python 3, 71 68 59 bytes
down another 9 bytes thanks to ovs.
lambda n,s:[int(c,11)for c in s.replace('10','a',len(s)-n)]
Try it online!
I was iniitially trying to use str.partition()
recursively, but using replace
smacked me in the face not too long after. Can anyone improve on this?
Also, here's a TIO link that I used to make the test cases into something more copy/pasteable
1
-3 bytes: drop space between: [c
and'x' else
and10 for
– mdahmoune
2 days ago
@mdahmoune Thanks for noticing, I have a hard time remembering what can be squished together.
– Gigaflop
2 days ago
8
General rule of thumb: Basically anything except for two letters can be squished together. If you get a syntax error, add random spaces until it works :)
– Quintec
2 days ago
There are some exceptions such as<number>e
,<letter><number>
,f'
.
– user202729
2 days ago
3
59 bytes by replacing 10 with a and reading each character as a base 11 int:lambda n,s:[int(c,11)for c in s.replace('10','a',len(s)-n)]
.
– ovs
yesterday
|
show 1 more comment
up vote
4
down vote
Python 3, 71 68 59 bytes
down another 9 bytes thanks to ovs.
lambda n,s:[int(c,11)for c in s.replace('10','a',len(s)-n)]
Try it online!
I was iniitially trying to use str.partition()
recursively, but using replace
smacked me in the face not too long after. Can anyone improve on this?
Also, here's a TIO link that I used to make the test cases into something more copy/pasteable
1
-3 bytes: drop space between: [c
and'x' else
and10 for
– mdahmoune
2 days ago
@mdahmoune Thanks for noticing, I have a hard time remembering what can be squished together.
– Gigaflop
2 days ago
8
General rule of thumb: Basically anything except for two letters can be squished together. If you get a syntax error, add random spaces until it works :)
– Quintec
2 days ago
There are some exceptions such as<number>e
,<letter><number>
,f'
.
– user202729
2 days ago
3
59 bytes by replacing 10 with a and reading each character as a base 11 int:lambda n,s:[int(c,11)for c in s.replace('10','a',len(s)-n)]
.
– ovs
yesterday
|
show 1 more comment
up vote
4
down vote
up vote
4
down vote
Python 3, 71 68 59 bytes
down another 9 bytes thanks to ovs.
lambda n,s:[int(c,11)for c in s.replace('10','a',len(s)-n)]
Try it online!
I was iniitially trying to use str.partition()
recursively, but using replace
smacked me in the face not too long after. Can anyone improve on this?
Also, here's a TIO link that I used to make the test cases into something more copy/pasteable
Python 3, 71 68 59 bytes
down another 9 bytes thanks to ovs.
lambda n,s:[int(c,11)for c in s.replace('10','a',len(s)-n)]
Try it online!
I was iniitially trying to use str.partition()
recursively, but using replace
smacked me in the face not too long after. Can anyone improve on this?
Also, here's a TIO link that I used to make the test cases into something more copy/pasteable
edited yesterday
answered 2 days ago
Gigaflop
2216
2216
1
-3 bytes: drop space between: [c
and'x' else
and10 for
– mdahmoune
2 days ago
@mdahmoune Thanks for noticing, I have a hard time remembering what can be squished together.
– Gigaflop
2 days ago
8
General rule of thumb: Basically anything except for two letters can be squished together. If you get a syntax error, add random spaces until it works :)
– Quintec
2 days ago
There are some exceptions such as<number>e
,<letter><number>
,f'
.
– user202729
2 days ago
3
59 bytes by replacing 10 with a and reading each character as a base 11 int:lambda n,s:[int(c,11)for c in s.replace('10','a',len(s)-n)]
.
– ovs
yesterday
|
show 1 more comment
1
-3 bytes: drop space between: [c
and'x' else
and10 for
– mdahmoune
2 days ago
@mdahmoune Thanks for noticing, I have a hard time remembering what can be squished together.
– Gigaflop
2 days ago
8
General rule of thumb: Basically anything except for two letters can be squished together. If you get a syntax error, add random spaces until it works :)
– Quintec
2 days ago
There are some exceptions such as<number>e
,<letter><number>
,f'
.
– user202729
2 days ago
3
59 bytes by replacing 10 with a and reading each character as a base 11 int:lambda n,s:[int(c,11)for c in s.replace('10','a',len(s)-n)]
.
– ovs
yesterday
1
1
-3 bytes: drop space between
: [c
and 'x' else
and 10 for
– mdahmoune
2 days ago
-3 bytes: drop space between
: [c
and 'x' else
and 10 for
– mdahmoune
2 days ago
@mdahmoune Thanks for noticing, I have a hard time remembering what can be squished together.
– Gigaflop
2 days ago
@mdahmoune Thanks for noticing, I have a hard time remembering what can be squished together.
– Gigaflop
2 days ago
8
8
General rule of thumb: Basically anything except for two letters can be squished together. If you get a syntax error, add random spaces until it works :)
– Quintec
2 days ago
General rule of thumb: Basically anything except for two letters can be squished together. If you get a syntax error, add random spaces until it works :)
– Quintec
2 days ago
There are some exceptions such as
<number>e
, <letter><number>
, f'
.– user202729
2 days ago
There are some exceptions such as
<number>e
, <letter><number>
, f'
.– user202729
2 days ago
3
3
59 bytes by replacing 10 with a and reading each character as a base 11 int:
lambda n,s:[int(c,11)for c in s.replace('10','a',len(s)-n)]
.– ovs
yesterday
59 bytes by replacing 10 with a and reading each character as a base 11 int:
lambda n,s:[int(c,11)for c in s.replace('10','a',len(s)-n)]
.– ovs
yesterday
|
show 1 more comment
up vote
3
down vote
Haskell, 98 bytes
n!x=[y|y<-s x,y==take n y]!!0
s('1':'0':x)=do y<-s x;[1:0:y,10:y]
s(x:y)=(read[x]:)<$>s y
s _=[]
Try it online or test all!
Explanation
The function s
does all possible splits, for example: "1010"
becomes [[1,0,1,0],[10,1,0],[1,0,10],[10,10]]
, note how the longest splits end up at the beginning (because 1:0:y
comes before 10:y
).
With that in mind, we can take all these values and filter the y
s out where y == take n y
which keeps also splits that are shorter than required. For example with 4
we leave the list the same [[1,0,1,0],[10,1,0],[1,0,10],[10,10]]
.
Now we can just get the first element in that list because the inputs will always be valid (eg. 5!"1010"
would give [1,0,1,0]
too, but we don't need to handle it).
Note: I somehow miscounted.. y==take n y
is the same length as length y==n
:S
add a comment |
up vote
3
down vote
Haskell, 98 bytes
n!x=[y|y<-s x,y==take n y]!!0
s('1':'0':x)=do y<-s x;[1:0:y,10:y]
s(x:y)=(read[x]:)<$>s y
s _=[]
Try it online or test all!
Explanation
The function s
does all possible splits, for example: "1010"
becomes [[1,0,1,0],[10,1,0],[1,0,10],[10,10]]
, note how the longest splits end up at the beginning (because 1:0:y
comes before 10:y
).
With that in mind, we can take all these values and filter the y
s out where y == take n y
which keeps also splits that are shorter than required. For example with 4
we leave the list the same [[1,0,1,0],[10,1,0],[1,0,10],[10,10]]
.
Now we can just get the first element in that list because the inputs will always be valid (eg. 5!"1010"
would give [1,0,1,0]
too, but we don't need to handle it).
Note: I somehow miscounted.. y==take n y
is the same length as length y==n
:S
add a comment |
up vote
3
down vote
up vote
3
down vote
Haskell, 98 bytes
n!x=[y|y<-s x,y==take n y]!!0
s('1':'0':x)=do y<-s x;[1:0:y,10:y]
s(x:y)=(read[x]:)<$>s y
s _=[]
Try it online or test all!
Explanation
The function s
does all possible splits, for example: "1010"
becomes [[1,0,1,0],[10,1,0],[1,0,10],[10,10]]
, note how the longest splits end up at the beginning (because 1:0:y
comes before 10:y
).
With that in mind, we can take all these values and filter the y
s out where y == take n y
which keeps also splits that are shorter than required. For example with 4
we leave the list the same [[1,0,1,0],[10,1,0],[1,0,10],[10,10]]
.
Now we can just get the first element in that list because the inputs will always be valid (eg. 5!"1010"
would give [1,0,1,0]
too, but we don't need to handle it).
Note: I somehow miscounted.. y==take n y
is the same length as length y==n
:S
Haskell, 98 bytes
n!x=[y|y<-s x,y==take n y]!!0
s('1':'0':x)=do y<-s x;[1:0:y,10:y]
s(x:y)=(read[x]:)<$>s y
s _=[]
Try it online or test all!
Explanation
The function s
does all possible splits, for example: "1010"
becomes [[1,0,1,0],[10,1,0],[1,0,10],[10,10]]
, note how the longest splits end up at the beginning (because 1:0:y
comes before 10:y
).
With that in mind, we can take all these values and filter the y
s out where y == take n y
which keeps also splits that are shorter than required. For example with 4
we leave the list the same [[1,0,1,0],[10,1,0],[1,0,10],[10,10]]
.
Now we can just get the first element in that list because the inputs will always be valid (eg. 5!"1010"
would give [1,0,1,0]
too, but we don't need to handle it).
Note: I somehow miscounted.. y==take n y
is the same length as length y==n
:S
edited 2 days ago
answered 2 days ago
BMO
10.7k21881
10.7k21881
add a comment |
add a comment |
up vote
3
down vote
Haskell, 68 bytes
n!('1':'0':x)|n-2<length x=10:(n-1)!x
n!(s:x)=read[s]:(n-1)!x
n!_=
Try it online!
Greedily take 10s as long as there are more digits than marks remaining.
add a comment |
up vote
3
down vote
Haskell, 68 bytes
n!('1':'0':x)|n-2<length x=10:(n-1)!x
n!(s:x)=read[s]:(n-1)!x
n!_=
Try it online!
Greedily take 10s as long as there are more digits than marks remaining.
add a comment |
up vote
3
down vote
up vote
3
down vote
Haskell, 68 bytes
n!('1':'0':x)|n-2<length x=10:(n-1)!x
n!(s:x)=read[s]:(n-1)!x
n!_=
Try it online!
Greedily take 10s as long as there are more digits than marks remaining.
Haskell, 68 bytes
n!('1':'0':x)|n-2<length x=10:(n-1)!x
n!(s:x)=read[s]:(n-1)!x
n!_=
Try it online!
Greedily take 10s as long as there are more digits than marks remaining.
answered 2 days ago
Nitrodon
6,8111820
6,8111820
add a comment |
add a comment |
up vote
2
down vote
Perl 5 -plF
, 39 bytes
$a=<>;$_="@F";s/1 0/10/ while$a-1<y/ //
Try it online!
add a comment |
up vote
2
down vote
Perl 5 -plF
, 39 bytes
$a=<>;$_="@F";s/1 0/10/ while$a-1<y/ //
Try it online!
add a comment |
up vote
2
down vote
up vote
2
down vote
Perl 5 -plF
, 39 bytes
$a=<>;$_="@F";s/1 0/10/ while$a-1<y/ //
Try it online!
Perl 5 -plF
, 39 bytes
$a=<>;$_="@F";s/1 0/10/ while$a-1<y/ //
Try it online!
answered 2 days ago
Xcali
5,030520
5,030520
add a comment |
add a comment |
up vote
2
down vote
Clean, 128 bytes
import StdEnv
@=[]
@['10':t]=[u++v\u<-[[10],[1,0]],v<- @t];@[h:t]=[[digitToInt h:v]\v<- @t]
?n l=hd[e\e<- @l|length e==n]
Try it online!
add a comment |
up vote
2
down vote
Clean, 128 bytes
import StdEnv
@=[]
@['10':t]=[u++v\u<-[[10],[1,0]],v<- @t];@[h:t]=[[digitToInt h:v]\v<- @t]
?n l=hd[e\e<- @l|length e==n]
Try it online!
add a comment |
up vote
2
down vote
up vote
2
down vote
Clean, 128 bytes
import StdEnv
@=[]
@['10':t]=[u++v\u<-[[10],[1,0]],v<- @t];@[h:t]=[[digitToInt h:v]\v<- @t]
?n l=hd[e\e<- @l|length e==n]
Try it online!
Clean, 128 bytes
import StdEnv
@=[]
@['10':t]=[u++v\u<-[[10],[1,0]],v<- @t];@[h:t]=[[digitToInt h:v]\v<- @t]
?n l=hd[e\e<- @l|length e==n]
Try it online!
answered 2 days ago
Οurous
5,99311032
5,99311032
add a comment |
add a comment |
up vote
2
down vote
05AB1E, 13 bytes
.œsù.ΔïTÝÃJ¹Q
Try it online!
or as a Test Suite
Explanation
.œ # partitions of the first input
sù # of a length equal to the second input
.Δ # find the first partition that returns true when:
ï # each element is converted to integer
TÝÃ # and only numbers in [0 ... 10] are kept
J # then join it together
¹Q # and compare it to the first input for equality
add a comment |
up vote
2
down vote
05AB1E, 13 bytes
.œsù.ΔïTÝÃJ¹Q
Try it online!
or as a Test Suite
Explanation
.œ # partitions of the first input
sù # of a length equal to the second input
.Δ # find the first partition that returns true when:
ï # each element is converted to integer
TÝÃ # and only numbers in [0 ... 10] are kept
J # then join it together
¹Q # and compare it to the first input for equality
add a comment |
up vote
2
down vote
up vote
2
down vote
05AB1E, 13 bytes
.œsù.ΔïTÝÃJ¹Q
Try it online!
or as a Test Suite
Explanation
.œ # partitions of the first input
sù # of a length equal to the second input
.Δ # find the first partition that returns true when:
ï # each element is converted to integer
TÝÃ # and only numbers in [0 ... 10] are kept
J # then join it together
¹Q # and compare it to the first input for equality
05AB1E, 13 bytes
.œsù.ΔïTÝÃJ¹Q
Try it online!
or as a Test Suite
Explanation
.œ # partitions of the first input
sù # of a length equal to the second input
.Δ # find the first partition that returns true when:
ï # each element is converted to integer
TÝÃ # and only numbers in [0 ... 10] are kept
J # then join it together
¹Q # and compare it to the first input for equality
edited yesterday
answered yesterday
Emigna
45k432136
45k432136
add a comment |
add a comment |
up vote
2
down vote
JavaScript (Babel Node), 70 69 59 bytes
Takes input as (n)(line)
.
n=>s=>(a=s.match(/10|./g)).flatMap(x=>x>9&&!a[--n]?[1,0]:x)
Try it online!
Commented
n => s => // given n and s
(a = s.match(/10|./g)) // split s into marks; a '1' followed by a '0' is always
// interpreted as '10'
.flatMap(x => // for each mark x:
x > 9 && // if x = '10',
!a[--n] ? // then decrement n; if a[n] is undefined:
[1, 0] // yield [1, 0]
: // else:
x // yield the mark unchanged
) // end of flatMap()
JavaScript (ES6), 64 59 bytes
Saved 5 bytes thanks to @guest271314
Takes input as (n)(line)
.
n=>g=([...s])=>1/s[n]?g(eval(`[${s}]`.replace('1,0',10))):s
Try it online!
Commented
n => // main function, taking n
g = ([...s]) => // g = recursive function, taking s
// (which is either a string or an array)
1 / s[n] ? // if s[n] is defined (i.e. we have too many marks):
g( // do a recursive call to g:
eval( // build a new array by evaluating ...
`[${s}]` // ... the string representation of s where the
.replace('1,0', 10) // first occurrence of '1,0' is replaced with '10'
) // end of eval()
) // end of recursive call
: // else:
s // return s
Why the output for N=3 and line='1010' is with mixed types [ 1, 0, '10' ]?
– mdahmoune
2 days ago
s.match()
returns an array of strings but a"10"
may be split into[1,0]
(2 integers) in the callback function offlatMap()
.
– Arnauld
2 days ago
1
We can coerce everything to integers for +1 byte.
– Arnauld
2 days ago
59 byteseval(`[${s}]`.replace('1,0',10))
– guest271314
yesterday
@guest271314 Thanks! Nice catch.
– Arnauld
yesterday
add a comment |
up vote
2
down vote
JavaScript (Babel Node), 70 69 59 bytes
Takes input as (n)(line)
.
n=>s=>(a=s.match(/10|./g)).flatMap(x=>x>9&&!a[--n]?[1,0]:x)
Try it online!
Commented
n => s => // given n and s
(a = s.match(/10|./g)) // split s into marks; a '1' followed by a '0' is always
// interpreted as '10'
.flatMap(x => // for each mark x:
x > 9 && // if x = '10',
!a[--n] ? // then decrement n; if a[n] is undefined:
[1, 0] // yield [1, 0]
: // else:
x // yield the mark unchanged
) // end of flatMap()
JavaScript (ES6), 64 59 bytes
Saved 5 bytes thanks to @guest271314
Takes input as (n)(line)
.
n=>g=([...s])=>1/s[n]?g(eval(`[${s}]`.replace('1,0',10))):s
Try it online!
Commented
n => // main function, taking n
g = ([...s]) => // g = recursive function, taking s
// (which is either a string or an array)
1 / s[n] ? // if s[n] is defined (i.e. we have too many marks):
g( // do a recursive call to g:
eval( // build a new array by evaluating ...
`[${s}]` // ... the string representation of s where the
.replace('1,0', 10) // first occurrence of '1,0' is replaced with '10'
) // end of eval()
) // end of recursive call
: // else:
s // return s
Why the output for N=3 and line='1010' is with mixed types [ 1, 0, '10' ]?
– mdahmoune
2 days ago
s.match()
returns an array of strings but a"10"
may be split into[1,0]
(2 integers) in the callback function offlatMap()
.
– Arnauld
2 days ago
1
We can coerce everything to integers for +1 byte.
– Arnauld
2 days ago
59 byteseval(`[${s}]`.replace('1,0',10))
– guest271314
yesterday
@guest271314 Thanks! Nice catch.
– Arnauld
yesterday
add a comment |
up vote
2
down vote
up vote
2
down vote
JavaScript (Babel Node), 70 69 59 bytes
Takes input as (n)(line)
.
n=>s=>(a=s.match(/10|./g)).flatMap(x=>x>9&&!a[--n]?[1,0]:x)
Try it online!
Commented
n => s => // given n and s
(a = s.match(/10|./g)) // split s into marks; a '1' followed by a '0' is always
// interpreted as '10'
.flatMap(x => // for each mark x:
x > 9 && // if x = '10',
!a[--n] ? // then decrement n; if a[n] is undefined:
[1, 0] // yield [1, 0]
: // else:
x // yield the mark unchanged
) // end of flatMap()
JavaScript (ES6), 64 59 bytes
Saved 5 bytes thanks to @guest271314
Takes input as (n)(line)
.
n=>g=([...s])=>1/s[n]?g(eval(`[${s}]`.replace('1,0',10))):s
Try it online!
Commented
n => // main function, taking n
g = ([...s]) => // g = recursive function, taking s
// (which is either a string or an array)
1 / s[n] ? // if s[n] is defined (i.e. we have too many marks):
g( // do a recursive call to g:
eval( // build a new array by evaluating ...
`[${s}]` // ... the string representation of s where the
.replace('1,0', 10) // first occurrence of '1,0' is replaced with '10'
) // end of eval()
) // end of recursive call
: // else:
s // return s
JavaScript (Babel Node), 70 69 59 bytes
Takes input as (n)(line)
.
n=>s=>(a=s.match(/10|./g)).flatMap(x=>x>9&&!a[--n]?[1,0]:x)
Try it online!
Commented
n => s => // given n and s
(a = s.match(/10|./g)) // split s into marks; a '1' followed by a '0' is always
// interpreted as '10'
.flatMap(x => // for each mark x:
x > 9 && // if x = '10',
!a[--n] ? // then decrement n; if a[n] is undefined:
[1, 0] // yield [1, 0]
: // else:
x // yield the mark unchanged
) // end of flatMap()
JavaScript (ES6), 64 59 bytes
Saved 5 bytes thanks to @guest271314
Takes input as (n)(line)
.
n=>g=([...s])=>1/s[n]?g(eval(`[${s}]`.replace('1,0',10))):s
Try it online!
Commented
n => // main function, taking n
g = ([...s]) => // g = recursive function, taking s
// (which is either a string or an array)
1 / s[n] ? // if s[n] is defined (i.e. we have too many marks):
g( // do a recursive call to g:
eval( // build a new array by evaluating ...
`[${s}]` // ... the string representation of s where the
.replace('1,0', 10) // first occurrence of '1,0' is replaced with '10'
) // end of eval()
) // end of recursive call
: // else:
s // return s
edited yesterday
answered 2 days ago
Arnauld
70.2k686295
70.2k686295
Why the output for N=3 and line='1010' is with mixed types [ 1, 0, '10' ]?
– mdahmoune
2 days ago
s.match()
returns an array of strings but a"10"
may be split into[1,0]
(2 integers) in the callback function offlatMap()
.
– Arnauld
2 days ago
1
We can coerce everything to integers for +1 byte.
– Arnauld
2 days ago
59 byteseval(`[${s}]`.replace('1,0',10))
– guest271314
yesterday
@guest271314 Thanks! Nice catch.
– Arnauld
yesterday
add a comment |
Why the output for N=3 and line='1010' is with mixed types [ 1, 0, '10' ]?
– mdahmoune
2 days ago
s.match()
returns an array of strings but a"10"
may be split into[1,0]
(2 integers) in the callback function offlatMap()
.
– Arnauld
2 days ago
1
We can coerce everything to integers for +1 byte.
– Arnauld
2 days ago
59 byteseval(`[${s}]`.replace('1,0',10))
– guest271314
yesterday
@guest271314 Thanks! Nice catch.
– Arnauld
yesterday
Why the output for N=3 and line='1010' is with mixed types [ 1, 0, '10' ]?
– mdahmoune
2 days ago
Why the output for N=3 and line='1010' is with mixed types [ 1, 0, '10' ]?
– mdahmoune
2 days ago
s.match()
returns an array of strings but a "10"
may be split into [1,0]
(2 integers) in the callback function of flatMap()
.– Arnauld
2 days ago
s.match()
returns an array of strings but a "10"
may be split into [1,0]
(2 integers) in the callback function of flatMap()
.– Arnauld
2 days ago
1
1
We can coerce everything to integers for +1 byte.
– Arnauld
2 days ago
We can coerce everything to integers for +1 byte.
– Arnauld
2 days ago
59 bytes
eval(`[${s}]`.replace('1,0',10))
– guest271314
yesterday
59 bytes
eval(`[${s}]`.replace('1,0',10))
– guest271314
yesterday
@guest271314 Thanks! Nice catch.
– Arnauld
yesterday
@guest271314 Thanks! Nice catch.
– Arnauld
yesterday
add a comment |
up vote
2
down vote
Java (OpenJDK 8), 78 bytes
A nice one-liner using the streams API.
(n,l)->l.join(":",l.split("10",l.length()-n+1)).chars().map(i->i-48).toArray()
Try it online!
How it works
(n,l)-> // Lambda function taking int and string
l.join(":", // Join the following array with colons
l.split("10", // Split the original string on "10"...
l.length()-n+1)) // But limit the parts to the difference between the length
// and expected length, to only remove required number of 10s
.chars() // Convert to an intstream of codepoints
.map(i->i-48) // Remove 48 to get the numeric value of each codepoint
.toArray() // Return an int array
add a comment |
up vote
2
down vote
Java (OpenJDK 8), 78 bytes
A nice one-liner using the streams API.
(n,l)->l.join(":",l.split("10",l.length()-n+1)).chars().map(i->i-48).toArray()
Try it online!
How it works
(n,l)-> // Lambda function taking int and string
l.join(":", // Join the following array with colons
l.split("10", // Split the original string on "10"...
l.length()-n+1)) // But limit the parts to the difference between the length
// and expected length, to only remove required number of 10s
.chars() // Convert to an intstream of codepoints
.map(i->i-48) // Remove 48 to get the numeric value of each codepoint
.toArray() // Return an int array
add a comment |
up vote
2
down vote
up vote
2
down vote
Java (OpenJDK 8), 78 bytes
A nice one-liner using the streams API.
(n,l)->l.join(":",l.split("10",l.length()-n+1)).chars().map(i->i-48).toArray()
Try it online!
How it works
(n,l)-> // Lambda function taking int and string
l.join(":", // Join the following array with colons
l.split("10", // Split the original string on "10"...
l.length()-n+1)) // But limit the parts to the difference between the length
// and expected length, to only remove required number of 10s
.chars() // Convert to an intstream of codepoints
.map(i->i-48) // Remove 48 to get the numeric value of each codepoint
.toArray() // Return an int array
Java (OpenJDK 8), 78 bytes
A nice one-liner using the streams API.
(n,l)->l.join(":",l.split("10",l.length()-n+1)).chars().map(i->i-48).toArray()
Try it online!
How it works
(n,l)-> // Lambda function taking int and string
l.join(":", // Join the following array with colons
l.split("10", // Split the original string on "10"...
l.length()-n+1)) // But limit the parts to the difference between the length
// and expected length, to only remove required number of 10s
.chars() // Convert to an intstream of codepoints
.map(i->i-48) // Remove 48 to get the numeric value of each codepoint
.toArray() // Return an int array
answered yesterday
Luke Stevens
704214
704214
add a comment |
add a comment |
up vote
1
down vote
Red, 91 bytes
func[n s][while[n < length? s][replace s"10""a"]foreach c s[prin[either c =#"a"[10][c]""]]]
Try it online!
add a comment |
up vote
1
down vote
Red, 91 bytes
func[n s][while[n < length? s][replace s"10""a"]foreach c s[prin[either c =#"a"[10][c]""]]]
Try it online!
add a comment |
up vote
1
down vote
up vote
1
down vote
Red, 91 bytes
func[n s][while[n < length? s][replace s"10""a"]foreach c s[prin[either c =#"a"[10][c]""]]]
Try it online!
Red, 91 bytes
func[n s][while[n < length? s][replace s"10""a"]foreach c s[prin[either c =#"a"[10][c]""]]]
Try it online!
answered yesterday
Galen Ivanov
5,99711032
5,99711032
add a comment |
add a comment |
up vote
1
down vote
Jelly, 18 bytes
Ḍ⁵⁻ƊƝr1ŒpS‘⁼ɗƇḢk⁸Ḍ
Try it online!
add a comment |
up vote
1
down vote
Jelly, 18 bytes
Ḍ⁵⁻ƊƝr1ŒpS‘⁼ɗƇḢk⁸Ḍ
Try it online!
add a comment |
up vote
1
down vote
up vote
1
down vote
Jelly, 18 bytes
Ḍ⁵⁻ƊƝr1ŒpS‘⁼ɗƇḢk⁸Ḍ
Try it online!
Jelly, 18 bytes
Ḍ⁵⁻ƊƝr1ŒpS‘⁼ɗƇḢk⁸Ḍ
Try it online!
answered 16 hours ago
Erik the Outgolfer
30.8k429102
30.8k429102
add a comment |
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%2f176735%2fsplit-marks-marks%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
Here's a Python snippet I used to get the
n, 'string'
pairs from the copypasted example text block:spl = [item.split('-')[0] for item in text.split('n')]
– Gigaflop
2 days ago
3
Plz some comments for down-votes...
– mdahmoune
yesterday
Downvotes don't require leaving comments for a reason. There is nothing that can be improved about this challenge.
– user202729
yesterday
So don't worry about it.
– user202729
yesterday
Are the outputs required to be in the same order as the input?
– Mnemonic
yesterday