summaryrefslogtreecommitdiff
path: root/day4/part2.TXT
diff options
context:
space:
mode:
authorAndreas Grois <andi@grois.info>2025-12-17 07:30:19 +0100
committerAndreas Grois <andi@grois.info>2025-12-17 07:30:19 +0100
commitdcebd44260fa67b04d217e778265982393ccc032 (patch)
treeb8eaf3de339d7a389632123c4765c53cce507a44 /day4/part2.TXT
parent7c225da26c5be1c255db34b52548b3af49097b07 (diff)
Day4: Comment programs and export text version.HEADmain
Diffstat (limited to 'day4/part2.TXT')
-rw-r--r--day4/part2.TXT89
1 files changed, 89 insertions, 0 deletions
diff --git a/day4/part2.TXT b/day4/part2.TXT
new file mode 100644
index 0000000..33779c5
--- /dev/null
+++ b/day4/part2.TXT
@@ -0,0 +1,89 @@
+\START92\
+\COMMENT=Part2 Day4 s: parsed input, w: input width
+\NAME=part2
+\FILE=day4.part2.92f
+(s,w)
+Func
+Local h,i,j,k,l,curr,prevs,pc,result,stack,stnum
+
+newMat(2,2500)\->\stack
+0\->\stnum
+0\->\result
+dim(s)\->\h
+If h<1 Then
+ Return result
+ElseIf h=1 Then
+ cntbits(s[1])\->\result[dim(result)]
+ Return result
+EndIf
+
+For i,1,w
+ newList(3)\->\prevs
+ false\->\pc
+ For j,1,h
+ getbits(s[j],i-1,3)\->\curr
+ cnt3bits(curr)\->\prevs[mod(j,3)+1]
+ \(C)\'and' is not short circuiting
+ If pc Then
+ If sum(prevs)<5 Then
+ result+1\->\result
+ zerobit(s[j-1],i)\->\s[j-1]
+ stnum+1\->\stnum
+ j-1\->\stack[1,stnum]
+ i\->\stack[2,stnum]
+ EndIf
+ EndIf
+ curr=2 or curr=3 or curr=6 or curr=7\->\pc
+ EndFor
+ \(C)\ last line
+ If pc Then
+ 0\->\prevs[mod(h+1,3)+1]
+ If sum(prevs)<5 Then
+ result+1\->\result
+ zerobit(s[h],i)\->\s[h]
+ stnum+1\->\stnum
+ h\->\stack[1,stnum]
+ i\->\stack[2,stnum]
+ EndIf
+ EndIf
+EndFor
+
+
+While stnum>0
+ stack[1,stnum]\->\l
+ stack[2,stnum]\->\k
+ stnum-1\->\stnum
+ For j,max(1,l-1),min(h,l+1)
+ For i,max(1,k-1),min(w,k+1)
+ If i\!=\k or j\!=\l Then
+ getbits(s[j],i-1,3)\->\curr
+ If curr=2 or curr=3 or curr\>=\6 Then
+ cnt3bits(curr)\->\prevs[1]
+ If j>1 Then
+ cnt3bits(getbits(s[j-1],i-1,3))\->\prevs[2]
+ Else
+ 0\->\prevs[2]
+ EndIf
+ If j<h Then
+ cnt3bits(getbits(s[j+1],i-1,3))\->\prevs[3]
+ Else
+ 0\->\prevs[3]
+ EndIf
+ If sum(prevs)<5 Then
+ result+1\->\result
+ zerobit(s[j],i)\->\s[j]
+ stnum+1\->\stnum
+ j\->\stack[1,stnum]
+ i\->\stack[2,stnum]
+ EndIf
+ EndIf
+ EndIf
+ EndFor
+ EndFor
+EndWhile
+
+result
+
+EndFunc
+
+\STOP92\