Challenges

# Shape of an array

+6
−0

Given a non-ragged array (an array where all sub-arrays at a particular level have the same length) of non-negative integers, answer its shape, that is, the length along every dimension. You may assume that the given array has at least one empty dimension, and that only the trailing dimension can have length 0.

### Test cases

[]



[[]][1,0]

[[],[]][2,0]

[[4,4],[0,3]][2,2]

[[,]][1,2,1]

[[[,]]][1,1,2,1]

Why does this post require moderator attention?
Why should this post be closed?

+1
−0

# Python 2, 37 bytes

l=input()
while 1:print len(l);l=l


Try it online!

This makes heavy use of programs being allowed to terminate with error, which I assume is allowed by default because it is on SE. We repeatedly print the length, and then replace the list with its first entry. This will fail when we're at a leaf, which is when the list is empty or is actually a number.

Why does this post require moderator attention?

+0
−0

# JavaScript (Node.js), 39 bytes

Returns dimensions from innermost to outermost

f=a=>a?.pop?f(a).concat(a.length):[]


# JavaScript (Node.js), 41 bytes

Returns dimensions from outermost to innermost

f=a=>a?.pop?[a.length].concat(f(a)):[]

Why does this post require moderator attention?

+0
−0

# JavaScript (Node.js), 36 bytes

f=a=>a?.map?[a.length,...f(a)]:[]


Try it online!

Why does this post require moderator attention?

+0
−0

## JavaScript (Node.js), 51 bytes

n=[];f=(a)=>a&&a.map?(n.push(a.length),f(a),n):n


Run f on your input, e.g. f([[],[]]).

Explanation:

n=[]; // make a global array to hold the results
f=(a)=> // make the function
a&&a.map? // is a defined, and an array?
(n.push(a.length), // add the length to the results
f(a),           // do it again on the first item
n)                 // ...and return n
// ...if not, return n
:n

Why does this post require moderator attention?

+0
−0

# Raku, 32 bytes

{map +*,(\$_,*...^9 ge*.gist)}


Try it online!

It's difficult to tell the difference between one element arrays and just plain numbers, since Raku translates between the two. However, gist returns the list formatted with brackets surrounding it, so we are able to use that to our advantage using string comparison.

Why does this post require moderator attention? 