Skip Navigation

InitialsDiceBearhttps://github.com/dicebear/dicebearhttps://creativecommons.org/publicdomain/zero/1.0/„Initials” (https://github.com/dicebear/dicebear) by „DiceBear”, licensed under „CC0 1.0” (https://creativecommons.org/publicdomain/zero/1.0/)QU
Posts
1
Comments
26
Joined
6 mo. ago

  • Uiua

    Credits to @mykl@lemmy.world for the approach of using reduce and also how to split the input by multiple characters.
    I can happily say that I learned quite a bit today, even though the first part made me frustrated enough that I went searching for other approaches ^^

    Part two just needed a simple modification. Changing how the input is parsed and passed to the adapted function took longer than changing the function itself actually.

    Run with example input here

     uiua
        
    PartOne ← (
      &rs ∞ &fo "input-7.txt"
      ⊜□≠@\n.
      ≡◇(⊜□≠@:.)
      ≡⍜⊡⋕0
      ≡⍜(°□⊡1)(⊜⋕≠@ .)
      ⟜(⊡0⍉)
    
      # own attempt, produces a too low number
      # ≡(:∩°□°⊟
      #   ⍣(⍤.◡⍣(1⍤.(≤/×)⍤.(≥/+),,)0
      #     ⊙¤⋯⇡ⁿ:2-1⊸⧻
      #     ⊞(⍥(⟜⍜(⊙(↙2))(⨬+×⊙°⊟⊡0)
      #         ↘1
      #       )⧻.
      #       ⍤.=0⧻.
      #     )
      #     ∈♭◌
      #   )0)
    
      # reduce approach found on the programming.dev AoC community by mykl@lemmy.world
      ≡(◇(∈/(◴♭[⊃(+|×)]))⊡0:°⊂)
      °□/+▽
    )
    
    PartTwo ← (
      &rs ∞ &fo "input-7.txt"
      ⊜(□⊜⋕¬∈": ".)≠@\n.
      ⟜≡◇⊢
      ≡◇(∈/(◴♭[≡⊃⊃(+|×|⋕$"__")]):°⊂)
      °□/+▽
    )
    
    &p "Day 7:"
    &pf "Part 1: "
    &p PartOne
    &pf "Part 2: "
    &p PartTwo
    
      
  • Uiua

    This is the first one that caused me some headache because I didn't read the instructions carefully enough.
    I kept trying to create a sorted list for when all available pages were used, which got me stuck in an endless loop.

    Another fun part was figuring out to use memberof (∈) instead of find (⌕) in the last line of FindNext. So much time spent on debugging other areas of the code

    Run with example input here

     uiua
        
    FindNext ← ⊙(
      ⊡1⍉,
      ⊃▽(▽¬)⊸∈
      ⊙⊙(⊡0⍉.)
      :⊙(⟜(▽¬∈))
    )
    
    # find the order of pages for a given set of rules
    FindOrder ← (
      ◴♭.
      []
      ⍢(⊂FindNext|⋅(>1⧻))
      ⊙◌⊂
    )
    
    PartOne ← (
      &rs ∞ &fo "input-5.txt"
      ∩°□°⊟⊜□¬⌕"\n\n".
      ⊙(⊜(□⊜⋕≠@,.)≠@\n.↘1)
      ⊜(⊜⋕≠@|.)≠@\n.
    
      ⊙.
      ¤
      ⊞(◡(°□:)
        ⟜:⊙(°⊟⍉)
        =2+∩∈
        ▽
        FindOrder
        ⊸≍°□:
        ⊙◌
      )
      ≡◇(⊡⌊÷2⧻.)▽♭
      /+
    )
    
    PartTwo ← (
      &rs ∞ &fo "input-5.txt"
      ∩°□°⊟⊜□¬⌕"\n\n".
      ⊙(⊜(□⊜⋕≠@,.)≠@\n.↘1)
      ⊜(⊜⋕≠@|.)≠@\n.
      ⊙.
      ⍜¤⊞(
        ◡(°□:)
        ⟜:⊙(°⊟⍉)
        =2+∩∈
        ▽
        FindOrder
        ⊸≍°□:
        ⊟∩□
      )
      ⊙◌
      ⊃(⊡0)(⊡1)⍉
      ≡◇(⊡⌊÷2⧻.)▽¬≡°□
      /+
    )
    
    &p "Day 5:"
    &pf "Part 1: "
    &p PartOne
    &pf "Part 2: "
    &p PartTwo
    
      
  • Uiua

    This one was nice. The second part seemed quite daunting at first but wasn't actually that hard in the end.

    Run with example input here

     uiua
        
    Row    ← ⌕ "XMAS"
    RevRow ← ⌕"SAMX"
    Sum    ← /+/+
    Count  ← +∩Sum⊃Row RevRow
    
    PartOne ← (
      &rs ∞ &fo "input-4.txt"
      ⊜∘≠@\n.
      ⊙+⟜∩Count⟜⍉ # horizontal and vertical search
      ⟜(/+⧈(Count⍉≡⬚@ ↻⇡⧻.)4)
      /+⧈(Count⍉≡⬚@ ↻¯⇡⧻.)4
      ++
    )
    
    Mask ← °⊚×2⇡5
    # Create variations of X-MAS
    Vars ← (
      ["M S"
       " A "
       "M S"]
      ≡♭[∩⟜⍉]≡⇌.
      Mask
      ⊏0⊞▽¤
    )
    
    PartTwo ← (
      &rs ∞ &fo "input-4.txt"
      ⊜∘≠@\n.
      ⧈(/+♭⊞≍⊙¤Vars▽Mask♭)3_3
      Sum
    )
    
    &p "Day 4:"
    &pf "Part 1: "
    &p PartOne
    &pf "Part 2: "
    &p PartTwo
    
      
  • Uiua

    Regex my beloved <3

    Run with example input here

     
        
    FindMul ← regex "mul\\((\\d+),(\\d+)\\)"
    
    PartOne ← (
      &rs ∞ &fo "input-3.txt"
      FindMul
      /+≡(×°⊟⋕⊏1_2)
    )
    
    IdDont ← ⊗□"don't()"♭
    
    PartTwo ← (
      &rs ∞ &fo "input-3.txt"
      regex "mul\\(\\d+,\\d+\\)|do\\(\\)|don't\\(\\)"
      ⍢(IdDont.
        ↘1⊃↘↙
        ⊗□"do()"♭.
        ⊂↘1↘
      | IdDont.
        ≠⧻,
      )
      ▽♭=0⌕□"do()".
      ≡(×°⊟⋕⊏1_2♭FindMul)♭
      /+
    )
    
    &p "Day 3:"
    &pf "Part 1: "
    &p PartOne
    &pf "Part 2: "
    &p PartTwo
    
      
  • Uiua

    Took me a bit longer to get this one but still quite simple overall.
    Spent quite some time on getting to know the try and assert operators better.

    Run with example input here

     
        
    # Get the indices matching the ascending/
    # descending criteria
    CheckAsc ← ≡°□⍚(⍣(⊸⍤.≍⍆.)⍣(⊸⍤.≍⇌⍆.)0)
    # Get the indices matching the distance criteria
    CheckDist ← ≡°□⍚(⍣(⊸⍤.≠1∈:0)0×⊓≥≤1,3⌵⧈-)
    Split     ← ⊙(▽≠1)▽,,
    
    PartOne ← (
      &rs ∞ &fo "input-2.txt"
      ⊜(□⊜⋕≠@ .)≠@\n.
      CheckAsc.
      ▽
      CheckDist
      ⧻⊚
    )
    
    PartTwo ← (
      &rs ∞ &fo "input-2.txt"
      ⊜(□⊜⋕≠@ .)≠@\n.
      CheckAsc.
      Split
      CheckDist.
      Split
      ⊙(⊂)
      ⧻
      :
      ⍚(≡(▽:°⊟)⍜¤⊞⊟:≠1⊞=.⇡⧻.)
      ≡(⧻⊚CheckDist▽CheckAsc.°□)
      +⧻◴⊚
    )
    
    &p "Day 2:"
    &pf "Part 1: "
    &p PartOne
    &pf "Part 2: "
    &p PartTwo
    
      
  • Uiua

    Decided to try and use Uiua for each day this year. At least I'm not the only one to get this idea ^^

    Run with example input here

     
        
    PartOne ← (
      &rs ∞ &fo "input-1.txt"
      ⊜(⊜⋕≠@ .)≠@\n.
      ≡⍆⍉
      ⌵/-
      /+
    )
    
    PartTwo ← (
      &rs ∞ &fo "input-1.txt"
      ⊜(⊜⋕≠@ .)≠@\n.
      ⊢⟜⊣⍉
      0
      ⍢(+⊙(:⊙(×⧻⊚◡⌕)↘1⟜⊢)|⋅(≠0⧻))
      ⊙(◌◌) # just cleaning up the stack
    )
    
    &p "Day 1:"
    &pf "Part 1: "
    &p PartOne
    &pf "Part 2: "
    &p PartTwo