musifter

AoC 2025 day 10 part 1 faster (dc)

Dec 12th, 2025
192
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.26 KB | Source Code | 0 0
  1. # Command: sed -e'y/.#(){},/01[][] /' <input | dc -fdc-p1.dc
  2.  
  3. # number registers for speed
  4. 0 s0
  5. 1 s1
  6. 2 s2
  7. 3 s3
  8. 4 s4
  9. 5 s5
  10. A sA
  11. _1 s_
  12.  
  13. # 10-bit XOR top two on stack
  14. [
  15.     l0d                      # (i=bit#) result
  16.     [
  17.         l3Rl4R               # argl2 argl1 i result
  18.  
  19.         l4~ l3R l4~          # (B-lowl2) Brest (A-lowl2) Arest i result
  20.         l3R
  21.         dl_r^l3R*+l4dl3R+r%  # (B^A lowl2) (B-rest) (A-rest) i result
  22.  
  23.         l4R d l2r^ l3R*      # (bit<<i) i restl1 restl2 result
  24.         l5R+                 # (result+=bit) i restl1 restl2
  25.         rl2+ d lA>L          # i+=l2, loop until i == l2l4
  26.     ] dsLx l3Rl4R++s,        # l3 result junkl2 junkl1
  27. ] s^
  28.  
  29. ?
  30.  
  31. [ lcsm   ] sR
  32. [ lclm>R ] sP
  33.  
  34. # Calculate numLights
  35. [
  36.     zsl xzll- dsl         # l = nunLights-l1
  37.     # stack: i junkl1 junkl2 ... junki ...
  38.     [
  39.         rs.
  40.         l1- dl0<D
  41.     ] dsDx s.
  42. ] sC
  43.  
  44. # Push Button: rest button=j i -> rest j i
  45. [
  46.     lcl1+sc               # bitcount++
  47.     rd;b lt l^x st r      # test ^= button(j)
  48. ] sB
  49.  
  50. [
  51.     lCx                   # Calculate l = numLights-l1
  52.     zl1- dsn              # n = numButtons; i [buttl1] [buttl2] ... [lights]
  53.  
  54.     l0Sb                  # clear button array; stack: i [buttl1] ...
  55.     [
  56.         dsi
  57.         rx                # bl1 bl2 ... i ...
  58.         zlil1+- l0r       # j=length(buttl1) bits bl1 bl2 ... i [buttl2] ...
  59.         [
  60.             l3R llr- l2r^ l3R+   # bits |= (l1 << l-bl1)
  61.             r l1- dl0<J
  62.         ] dsJx +          # bits i [buttl2] ... [lights]
  63.  
  64.         r dl3R r:b        # button[i] = bits; i [buttl2] ...
  65.         l1- dl0<I
  66.     ] dsIx s.
  67.  
  68.     #'b
  69.     l2ixlAi sT            # lights T=targ
  70.  
  71.     lAd^ sm               # min = 10000000000
  72.  
  73.     ln l2r^l1-            # i=l2^numButtons-l1
  74.     [
  75.         l0st              # test = l0 (XXX: do this on stack?)
  76.         l0sc              # bitcount = l0
  77.         dln               # j=numButtons bits=i i
  78.         [
  79.             rl2~          # lowBit rest j i
  80.             l1=B          # push button[j]; rest j i
  81.  
  82.             r l1- dl0<J   # j-- rest i  (XXX: make test on bits == l0?)
  83.         ] dsJx ++         # l0 l0 i -> i
  84.  
  85.         ltlT=P
  86.  
  87.         l1- dl0<I
  88.     ] dsIx s.
  89.  
  90.     lplm+psp
  91.  
  92.     ? zl0<M
  93. ] dsMx
  94.  
  95. [Part 1: ]nlpp
Advertisement
Add Comment
Please, Sign In to add comment