Advertisement
musifter

AoC 2023 day 11 (dc)

Dec 11th, 2023 (edited)
1,125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 1.47 KB | Source Code | 0 0
  1. # Command: perl -pe's/(.)/$1 /g;y/.#/01/' | dc -e2 -fpart1.dc
  2. # Change the -e1 to -e1000000 for part 2
  3.  
  4. ss                              # scale (extra lines to add)
  5.  
  6. # Load grid:
  7. ? 1                             # line y
  8. [
  9.     0                           # top y ysum
  10.     [
  11.         3Rd 3R+ r               # y (ysum+=top) top
  12.  
  13.         z2-                     # y ysum top x=z-2
  14.         d_3R                    # y ysum x top x
  15.         ;c + r:c                # col(x)+=top; y ysum
  16.  
  17.         z 2<X
  18.     ] dsXx
  19.  
  20.     # stack: y ysum
  21.     d lg+sg                     # galaxy number += ysum
  22.     rd_3R :r                    # row(y) = ysum
  23.     1+                          # y++
  24.  
  25.     ? zRz 1<Y
  26. ] dsYx
  27.  
  28. # Expand: 1 -> scale
  29. [ ls* ] sE
  30.  
  31. # absolute differences with expanded 0s (stack: i=last-index)
  32. [
  33.     0 sc                        # column
  34.     0 sa                        # accumulated seen
  35.  
  36.     0r                          # dist=0 i
  37.     [
  38.         dlAx                    # dist i arr(i)
  39.         d 1 r0=E lc+sc          # inc col (expand by scale if 0); dist i arr(i)
  40.  
  41.         d dla2*+lg- *lc*        # dist i arr(i) factor=col*arr(i)*(2*seen+arr(i)-#gals)
  42.  
  43.         r la+sa                 # seen += arr(i); dist i factor
  44.         3R+                     # i dist+=factor
  45.  
  46.         r1- d 0<L
  47.     ] dsLx
  48.     +                           # clear i (+0)
  49. ] sD
  50.  
  51. # Stack: size (10 or 140)
  52. 1-
  53. [;r]sA dlDx                     # size -> size-1 row_dist
  54. [;c]sA rlDx +p
  55.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement