Backspace an array
Challenge
Given an array consisting of positive integers and 0s, return it with 0s acting like backspaces.
Leading backspaces do nothing, and more backspaces than elements also does nothing.
Credit: A comment on this video
Test Cases
[0,0,0,0,0,5,7] -> [5,7]
[1,2,0,3] -> [1,3]
[1,5,5,0,2,0,0,8] -> [1,8]
[1,2,3,4,0,0,9] -> [1,2,9]
[1,2,0,0,0,0,0] -> []
[Jelly], 6 bytes ṣ0Ṗ;¥/ …
3y ago
Scala, 45 bytes ```scala ./: …
3y ago
[JavaScript (Node.js)], 41 40 …
3y ago
[Python 3.8 (pre-release)], 62 …
3y ago
Japt, 9 bytes ô rÈÔÅÔcY …
3y ago
[Husk], 6 bytes Fo+hx0 …
3y ago
6 answers
Japt, 9 bytes
ô rÈÔÅÔcY
ô rÈÔÅÔcY :Implicit input of array
ô :Split on falsey elements (i.e., 0)
r :Reduce by
È :Passing each Y through the following function, with the first element serving as the start value, X
Ô : Reverse X
Å : Slice off the first element
Ô : Reverse
cY : Concat Y
0 comment threads
Jelly, 6 bytes
ṣ0Ṗ;¥/
How it works
ṣ0Ṗ;¥/ - Main link. Takes a list on the left
ṣ0 - Split at zeroes
¥/ - Reduce by:
Ṗ - Remove the last element
; - Concatenate
Scala, 45 bytes
_./:(Seq[Int]())((a,x)=>a:+x dropRight-x*2+2)
I couldn't find a way to use underscores in the inner function :(. Explanation on its way.
_ //The input
./:( //Fold over it,
Seq[Int]() //starting with an empty list,
)( //using this function
(a,x) => //a is the accumulator, x is the current element
a:+x //Append x to a
dropRight //then drop an element from the right if x is 0
-x*2+2 //For 0, this is 2
//(drop the 0 that we just appended and the previous element)
//and for other numbers, it's negative, so it doesn't do anything
)
0 comment threads
Python 3.8 (pre-release), 62 bytes
f=lambda x,a=[]:f(x[1:],a+[x[0]]if x[0]else a[:-1])if x else a
-11 bytes thanks to user
JavaScript (Node.js), 41 40 bytes
Saved 1 byte thanks to Shaggy
x=>x.map(e=>e?a.push(e):a.pop(),a=[])&&a
x => //x is the input
x.map(e=> //For every element e in x
e? //If e is not 0
a.push(e) //Add it to the accumulator
:a.pop(), //Otherwise, pop the last element
a=[]) //Initial value of the accumulator
&&a //Return the accumulator
1 comment thread