musifter

AoC 2025 day 10 part 1 (dc)

Dec 10th, 2025 (edited)
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.14 KB | Source Code | 0 0
  1. # Command: sed -e'y/.#(){},/01[][] /' <input | dc -fdc-p1.dc
  2.  
  3. # 10-bit XOR top two on stack
  4. [
  5.     0d                      # (i=bit#) result
  6.     [
  7.         3R4R                # arg2 arg1 i result
  8.  
  9.         4~ 3R 4~            # (B-low2) Brest (A-low2) Arest i result
  10.         3R
  11.         d_1r^3R*+4d3R+r%    # (B^A low2) (B-rest) (A-rest) i result
  12.  
  13.         4R d 2r^ 3R*        # (bit<<i) i rest1 rest2 result
  14.         5R+                 # (result+=bit) i rest1 rest2
  15.         r2+ d A>L          # i+=2, loop until i == 24
  16.     ] dsLx 3R4R++s,         # 3 result junk2 junk1
  17. ] s^
  18.  
  19. ?
  20.  
  21. [ lcsm   ] sR
  22. [ lclm>R ] sP
  23.  
  24. # Calculate numLights
  25. [
  26.     zsl xzll- dsl        # l = nunLights-1
  27.     # stack: i junk1 junk2 ... junki ...
  28.     [
  29.         rs.
  30.         1- d0<D
  31.     ] dsDx s.
  32. ] sC
  33.  
  34. # Push Button: rest button=j i -> rest j i
  35. [
  36.     lc1+sc               # bitcount++
  37.     rd;b lt l^x st r     # test ^= button(j)
  38. ] sB
  39.  
  40. [
  41.     lCx                  # Calculate l = numLights-1
  42.     z1- dsn              # n = numButtons; i [butt1] [butt2] ... [lights]
  43.  
  44.     0Sb                  # clear button array; stack: i [butt1] ...
  45.     [
  46.         dsi
  47.         rx               # b1 b2 ... i ...
  48.         zli1+- 0r        # j=length(butt1) bits b1 b2 ... i [butt2] ...
  49.         [
  50.             3R llr- 2r^ 3R+   # bits |= (1 << l-b1)
  51.             r 1- d0<J
  52.         ] dsJx +         # bits i [butt2] ... [lights]
  53.  
  54.         r d3R r:b        # button[i] = bits; i [butt2] ...
  55.         1- d0<I
  56.     ] dsIx s.
  57.  
  58.     #'b
  59.     2ixAi sT       # lights T=targ
  60.  
  61.     Ad^ sm              # min = 10000000000
  62.  
  63.     ln 2r^1-             # i=2^numButtons-1
  64.     [
  65.         0st              # test = 0 (XXX: do this on stack?)
  66.         0sc              # bitcount = 0
  67.         dln              # j=numButtons bits=i i
  68.         [
  69.             r2~          # lowBit rest j i
  70.             1=B          # push button[j]; rest j i
  71.  
  72.             r 1- d0<J    # j-- rest i  (XXX: make test on bits == 0?)
  73.         ] dsJx ++        # 0 0 i -> i
  74.  
  75.         ltlT=P
  76.  
  77.         1- d0<I
  78.     ] dsIx s.
  79.  
  80.     lplm+ p sp           # print running total as status line
  81.  
  82.     ? z0<M
  83. ] dsMx
  84.  
  85. [Part 1: ]nlpp
Advertisement
Add Comment
Please, Sign In to add comment