Uiua
Quite simple this one. Part 2 still takes a few seconds because I'm essentially checking off each roll individually.
Code
$ ..@@.@@@@.
$ @@@.@.@.@@
$ @@@@@.@.@@
$ @.@@@@..@.
$ @@.@@@@.@@
$ .@@@@@@@.@
$ .@.@.@.@@@
$ @.@@@.@@@@
$ .@@@@@@@@.
$ @.@.@@@.@.
⊜∘⊸≠@\n
=@@
Rolls ← ⍣(⧻⊚˙⍤)∞⊸⊡1_1
Removable ← (
⬚0⧈Rolls[3_3 1_1 1_1]
⊚≤4
)
Remove ← ⍜⊡(˜↯0⧻)
PartOne ← ⧻Removable
PartTwo ← (
⊙0
⍥(
⊙(⊙+⟜⧻)⟜Removable
˜Remove
)∞
◌
)
&pf "Part One: "
&p ⊸PartOne
&pf "Part Two: "
&p PartTwo
Old Part 2
Before seeing mykl's solution this was my solution for part 2
PartTwoOld ← (
0⊙0
⍢(⊙⊙◌
⊙⊸Removable
+⊙⊸⧻
⊙⊸Remove
| ¬≍◌)
⊙⋅◌
)
It's basically the same, just that I used a while-do-loop, making the check for the ending condition myself (which took me a bit to get right because I still find loops in Uiua a bit confusing).
Using the repeat-loop as above also gets rid of the dip's (⊙). I could've removed them here as well but I was already deep in the trouble of getting the loop to work correctly and I liked the little face at the beginning 0⊙0