### Communities

tag:snake search within a tag
user:xxxx search by author id
score:0.5 posts with 0.5+ score
"snake oil" exact phrase
created:<1w created < 1 week ago
post_type:xxxx type of post
Challenges

# Truthify an array

+7
−0

Jelly has an atom called untruth, which when given indices, creates an array with 1s at those places: [2,4] → [0,1,0,1].

You are required to perform the inverse of this. Given a 2D boolean array, find the indices of the true values in it.

# Challenge

You will be given a single 2D boolean array $M$. You may take its dimensions as a separate argument if needed.

The output must consist of all the indices of the true values in $M$.

Output may be 0-indexed or 1-indexed.

It is guaranteed that the input will only consist of two different values.

# Test Cases

All test cases are 0-indexed.

I: [[1,0,1,1,1,0]]
O: [[0,0],[0,2],[0,3],[0,4]]

I: [[1,0,1],[1,0,1],[0,1,0]]
O: [[0,0],[0,2],[1,0],[1,2],[2,1]]


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

+7
−0

# JavaScript (Node.js), 74 70 bytes

Works for any number of dimensions.

f=(a,z=[])=>a.map?.((b,c)=>z.push(...f(b).map(a=>[c,...a])))?z:a?[z]:z


Try it online! (TIO uses an old version of Node.js that does not support the ?. operator, but you can try the 74 bytes solution)

Why does this post require moderator attention?

+5
−0

# APL (Dyalog Extended), 1 byte

⍸


¯\(ツ)

Try it online!

Why does this post require moderator attention?

+5
−0

# Jelly, 2 bytes

ŒṪ


Try it online!

1-indexed, but the footer converts to 0-indexed.

Less built-in:

# Jelly, 3 bytes

œẹ1


Try it online!

œẹ     All multidimensional indices of
1    one.


Less built-in:

# Jelly, 7 bytes

J,Ɱ"T€Ẏ


Try it online!

 ,Ɱ        Pair each
T      truthy index
€     from all rows
J  "       with the indices of the rows.
Ẏ    Flatten rows.


The absolute least built-in:

# Jelly, 8 bytes

Jx),€"JẎ


Try it online!

Outputs each index backwards.

Jx          Repeat each index by the corresponding element
)         for each row.
,€"J     Pair each remaining index with its row index.
Ẏ    Flatten rows.

Why does this post require moderator attention?

+4
−0

# JavaScript (V8), 44 bytes

a=>a.map((a,x)=>a.map((n,y)=>n&&print(x,y)))


Try it online!

Why does this post require moderator attention?

+4
−0

# C (gcc), 100 bytes

i,j;f(x,y,p)int*p;{puts("[");for(;i<x;i++)for(j=0;j<y;j++)*p++&&printf("[%d,%d],",i,j);puts("\b]");}


Try it online!

Note that TIO console doesn't handle backspace properly.

Why does this post require moderator attention?

+2
−0

# Scala 3, 68 bytes

_.zipWithIndex.flatMap(_.zipWithIndex.filter(_._1)map(_._2)map _.->)


Try it in Scastie!

Takes a List[List[Boolean]], returns a List[(Int, Int)]. This abuses underscores a bit (which is why Scala 3 is needed), but I'm proud of it.

Explanation:

_.zipWithIndex //Zip each row with its index
.flatMap(    //Map every (row, index) tuple to a list of truthy indices,
//then flatten
_.zipWithIndex //Zip each element with its column
.filter(_._1) //Keep the tuples where the element (_1) is true
map(_._2)     //Keep the second part of the tuple (the column)
map _.->)     //Make a 2-tuple with the row's index

Why does this post require moderator attention?

+2
−0

## JavaScript (Node.js), 68 bytes

f=(a)=>a.map((x)=>[...x.entries()].filter((e)=>e[1]).map((e)=>e[0]))


Run the function f on your input, e.g. f([[1,0,1],[1,0,1],[0,1,0]]).

The output looks like this:

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


with one subarray for each input subarray.

Explanation:

f=(a)=> // creates a function to run the input on
a.map((x)=> // for each outer array:
[...x.entries()]   // creates things like this: [index, value]
.filter((e)=>e[1]) // keep ones where the value acts like true
.map((e)=>e[0])    // return the indices for each one
)
Why does this post require moderator attention?

+2
−0

# Japt-m, 8 7 bytes

ð òÎmiV


Try it

ð òÎmiV     :Implicit map of each sub-array at 0-based index V
ð           :Indices of truthy (i.e., non-zero) elements
ò         :Partition between elements where
Î        :The sign of their difference is truthy
m       :Map
iV     :  Prepend V
Why does this post require moderator attention?

+1
−0

# Python 3, 75 bytes

lambda a:[[i,k]for i in r(l(a))for k in r(l(a[0]))if a[i][k]]
r=range;l=len


Try it online!

Why does this post require moderator attention?

+0
−0

# shortC, 78 bytes

i,j;f(Ix,Iy,I*p){R"[");O;i<x;i++)Oj=0;j<y;j++)*p++&&R"[%d,%d],",i,j);J"\b]");}


Try it online!