this post was submitted on 02 Dec 2024
44 points (97.8% liked)

Advent Of Code

981 readers
36 users here now

An unofficial home for the advent of code community on programming.dev!

Advent of Code is an annual Advent calendar of small programming puzzles for a variety of skill sets and skill levels that can be solved in any programming language you like.

AoC 2024

Solution Threads

M T W T F S S
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25

Rules/Guidelines

Relevant Communities

Relevant Links

Credits

Icon base by Lorc under CC BY 3.0 with modifications to add a gradient

console.log('Hello World')

founded 1 year ago
MODERATORS
 

Day 2: Red-Nosed Reports

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://blocks.programming.dev/ if you prefer sending it through a URL

FAQ

you are viewing a single comment's thread
view the rest of the comments
[–] [email protected] 5 points 3 weeks ago* (last edited 3 weeks ago) (2 children)

Uiua

Uiua is still developing very quickly, and this code uses the experimental tuples function, hence the initial directive.

Try it Live!

# Experimental!
"7 6 4 2 1\n1 2 7 8 9\n9 7 6 2 1\n1 3 2 4 5\n8 6 4 4 1\n1 3 6 7 9"
⊜(⊜⋕⊸≠@\s)⊸≠@\n # Partition at \n, then at space, parse ints.

IsSorted ← +⊃(≍⇌⍆.|≍⍆.)        # Compare with sorted array.
IsSmall  ← /××⊃(>0|<4)⌵↘¯1-↻1. # Copy offset by 1, check diffs.
IsSafe   ← ×⊃IsSmall IsSorted  # Safe if Small steps and Ordered.
IsSafer  ← ±/+≡IsSafe ⧅<-1⧻.   # Choose 4 from 5, check again.

&p/+≡IsSafe .            # Part1 : Is each row safe?
&p/+≡(±+⊃IsSafe IsSafer) # Part2 : Is it safe or safer?
[–] [email protected] 7 points 3 weeks ago (2 children)

How do you write this, not conceptually but physically. Do you have a char picker open at all times?

[–] [email protected] 4 points 3 weeks ago

Haha, you can do it that way, in fact the online Uiua Pad editor has all the operators listed along the top.

But all the operators have ascii names, so you can type e.g. IsSmall = reduce mul mul fork(>0|<4) abs drop neg 1 - rot 1 dup and the formatter will reduce that to IsSmall ← /××⊃(>0|<4)⌵↘¯1-↻1. whenever you save or execute code.

That works in the Pad, and you can enable similar functionality in other editors.

[–] [email protected] 2 points 3 weeks ago (1 children)

i can only imagine doing it with a drawing tablet

[–] [email protected] 4 points 3 weeks ago

I like to assume people using array programming languages just have a crystal ball that they use to call upon magic runes on the screen

[–] [email protected] 3 points 3 weeks ago (1 children)

This looks so alien! Does it work with the full set? The comment says 5, choose 4, but I guess it’s written as n, choose n-1?

[–] [email protected] 1 points 3 weeks ago

Yes, it should do. I do run the solutions against the live data, but sometimes tweak the solutions afterwards, so can't always guarantee them :-). I left the comment as 5 choose 4 as it felt clearer in the context of the test data.

It does still feel very alien at times, but I do love being able to think about how to adopt a more arrays-based approach to solving these problems.