Advertisement
musifter

AoC 2024, day 7, part 2 (dc)

Dec 7th, 2024 (edited)
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 1.26 KB | Source Code | 0 0
  1. # Command: tr -d ':' <input | dc -fdc-p2.dc
  2.  
  3. [ 0*  ] sZ
  4. [ lt+ ] sT
  5.  
  6. # exit recursion: idx=0 acc -> acc or 0
  7. [
  8.     + dlt!=Z            # zero top of stack it acc != target
  9.     q
  10. ] sX
  11.  
  12. # recursion: stack frame: acc idx; return acc or 0
  13. [
  14.     d lt<X              # prune if acc > targ
  15.     r 1-d 0=X           # idx--, check base case, stack: idx acc
  16.     d3Rd                # acc acc idx idx
  17.     3R d;l 3R+          # list(idx)+acc idx acc idx
  18.     lRx                 # res acc idx
  19.     _3R                 # tuck res
  20.  
  21.     d3Rd                # idx idx acc acc res+
  22.     d;l 4R*
  23.     lRx                 # res* idx acc res+
  24.     _3R                 # tuck res
  25.  
  26.     d;l
  27.     dZ10r^ 4R*+         # concat acc||val
  28.     lRx                 # res|| res* res+
  29.     ++                  # "or" results with +
  30. ] sR
  31.  
  32. 0
  33. ?
  34. [
  35.     0
  36.     [
  37.         1+
  38.         d3R r:l         # store list (backwards n to 1)
  39.         z3<I
  40.     ] dsIx              # stack: n=size-of-list target sum
  41.  
  42.     rst                 # target = input(0); stack: n sum
  43.     d;l                 # acc = list(n) (first item); stack: acc i=n sum
  44.     lRx                 # res sum
  45.     0d 3R>T             # res = (res > 0) ? targ : 0
  46.     +                   # sum += res
  47.     ? z1<M
  48. ] dsMx
  49.  
  50. [Part 2: ]n p
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement