35
3
Write a function (using as few bytes as possible) that takes a bi-dimensional array of any number of columns and rows in which:
0
represents empty block,1
represents snake block.
The function must return the number of possible paths the snake traveled.
Example 1:
Input:
[
[1,1,1,1,1],
[0,0,0,0,1],
[0,0,0,0,1],
]
Output: 2
In the example above, the function will return 2
because the answer is either one of:
Example 2:
Input:
[
[1,1,1,1],
[0,0,1,1],
[0,0,1,1],
]
Output: 6
In this example the function will return 6
because the answer is either one of:
Note:
When assessing the input, you can assume that:
- The arrays representing columns will always have the same sizes (so the arrays are rectangular);
- There exists at least 1 valid path;
- The snake cannot walk through the edges (as can happen in some versions of snake);
- The snake will always have at least 2 blocks;
- The snake cannot move diagonally;
- The paths are directed. (so, two paths ending at different positions but otherwise looking exactly the same are not the same path, it’ll add up to the total)
13Welcome to PPCG! Nice first challenge. – Laikoni – 2018-05-18T08:14:55.027
5Minor note: "There will always be at least one row and one column" is redundant, given that the snake will always have at least 2 blocks. – Stewie Griffin – 2018-05-18T09:17:45.683
1What's the correct output for a 3-by-3 square of 1's? One solution return 28, one returns 40. The last one times out, so I'm not sure what that would give... – Stewie Griffin – 2018-05-18T10:53:35.427
1Can the input have no possible answer and require a 0? – l4m2 – 2018-05-18T10:55:30.007
2Suggested test cases: the one given by @StewieGriffin and
[[0,0,1,1],[0,0,1,1],[0,0,1,1]]
. Most answers give 16, but one gives 15. – Kevin Cruijssen – 2018-05-18T11:01:21.5631
What's the expected output for this?
– Arnauld – 2018-05-18T12:54:13.1102It seems like everybody so far (including me) has made the assumption that 2 paths ending at different positions but otherwise looking exactly the same are not the same path. I think this needs to be explicitly specified. – Arnauld – 2018-05-18T13:16:46.373
2@Arnauld - that’s right. Two paths ending at different positions but otherwise looking exactly the same are not the same path, it’ll add up to the total. In your example the total should be 16 if I’m not mistaken - I can’t accuratelly calculate right now but you get the point – Adelin – 2018-05-18T13:42:19.133
The last condition is equivalent to "paths are directed". – user202729 – 2018-05-18T15:19:46.663
Is it possible that the result is 0? (for example: input
[[0,1,0],[1,1,1],[0,1,0]]
) – user202729 – 2018-05-19T03:22:35.353@user202729 no, it’s not possible. You should always expect a valid snake. Actually all those notes I’ve written was so that you don’t need to validate the input yourself – Adelin – 2018-05-19T04:02:12.977
I edited the post to add that (because it's not deducible from the other facts) and also remove some redundant rules. – user202729 – 2018-05-19T04:09:10.283
@user202729 ok thanks but just so you know, with the minimum 2 blocks snake we can already have 2 paths (minimum) – Adelin – 2018-05-19T04:23:04.367
Are cycles counted multiple times? E.g. should [[1,1],[1,1]] return 2 or 8? – MooseBoys – 2018-05-19T05:14:43.423
@MooseBoys yes, multiple times, as they are unique paths nonetheless. That would be an 8 indeed – Adelin – 2018-05-19T05:15:47.620