Day 4: Printing Department

Megathread guidelines

  • Keep top level comments as only solutions, if you want to say something other than a solution put it in a new post. (replies to comments can be whatever)
  • You can send code in code blocks by using three backticks, the code, and then three backticks or use something such as https://topaz.github.io/paste/ if you prefer sending it through a URL

FAQ

you are viewing a single comment's thread
view the rest of the comments
[–] 1 point 10 months ago

Uiua

Quite simple this one. Part 2 still takes a few seconds because I'm essentially checking off each roll individually.

Run with example input

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 2Before 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

  • source