☃️ - 2023 DAY 4 SOLUTIONS -☃️ - eviltoast

Day 4: Scratchcards


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)
  • Code block support is not fully rolled out yet but likely will be in the middle of the event. Try to share solutions as both code blocks and using something such as https://topaz.github.io/paste/ or pastebin (code blocks to future proof it for when 0.19 comes out and since code blocks currently function in some apps and some instances as well if they are running a 0.19 beta)

FAQ


🔒This post will be unlocked when there is a decent amount of submissions on the leaderboard to avoid cheating for top spots

🔓 Unlocked after 8 mins

  • corristo@programming.dev
    link
    fedilink
    arrow-up
    3
    ·
    edit-2
    11 months ago

    APL

    I’m using this years’ AoC to learn (Dyalog) APL, so this is probably terrible code. I’m happy to receive pointers for improvement, particularly if there is a way to write the same logic with tacit functions or inner/outer products that I missed.

    input←⊃⎕NGET'inputs/day4.txt'1
    num_matches←'Card [ \d]+: ([ 0-9]+) \| ([ 0-9]+)'⎕S{≢↑∩/0~⍨¨{,⎕CSV⍠'Separator' ' '⊢⍵'S'3}¨⍵.(1↓Lengths↑¨Offsets↓¨⊂Block)} input
    ⎕←+/2*1-⍨0~⍨num_matches ⍝ part 1
    ⎕←+/{⍺←0 ⋄ ⍺=≢⍵:⍵ ⋄ (⍺+1)∇⍵ + (≢⍵)↑∊((⍺+1)⍴0)(num_matches[⍺]⍴⍵[⍺])((≢⍵)⍴0)}(≢num_matches)⍴1 ⍝ part 2
    
    • mykl@lemmy.world
      link
      fedilink
      arrow-up
      2
      ·
      11 months ago

      I just posted a solution in Uiua, which is also probably equally terrible, but if you squint you can see some similarities in our approaches.

      • corristo@programming.dev
        link
        fedilink
        arrow-up
        2
        ·
        11 months ago

        I haven’t heard of Uiua before, but I can read some things :D I like the idea of rotating the vector instead of manually padding it with the required number of leading zeroes!

        • mykl@lemmy.world
          link
          fedilink
          arrow-up
          1
          ·
          11 months ago

          I think it’s only a few months old. I’ve enjoyed playing with it because it allows me to use stack manipulation as an alternative to combinators and every symbol has a fixed arity both of which make it feel a lot more accessible to me.

          I was very pleased with myself when I thought of that rotation trick :-)