aoc-2022

My solutions in postscript to Advent of Code 2022
Log | Files | Refs | README | LICENSE

commit e8808ec75457fdd07f08e6e78ecb26b251eae43e
parent 8046011b9540fcd3d1dc534733f33267b0e6945b
Author: Natasha Kerensikova <natacha@instinctive.eu>
Date:   Sun,  4 Dec 2022 11:50:11 +0100

Add day 4 reference input and solutions

Diffstat:
Aday04.ps | 136+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aday04.txt | 6++++++
2 files changed, 142 insertions(+), 0 deletions(-)

diff --git a/day04.ps b/day04.ps @@ -0,0 +1,136 @@ +%!PS +% Usage: +% gs -q- -sDEVICE=png16m -o- day04.ps <day04.txt | display + +/str_to_int { + 0 exch { exch 10 mul add 48 sub } forall +} bind def + +/int_to_str { + % number + 1 10 + { % number length upper-bound + 2 index 1 index lt { exit } if + exch 1 add exch 10 mul } loop + pop dup string exch 1 sub + { % number string index + 2 copy 1 sub 5 1 roll exch + % next_index number string string index + 3 index 10 mod 48 add + % next_index number string string index digit + put + % next_index number next_string + 3 1 roll 10 idiv + % next_string next_index next_number + dup 0 eq { pop pop exit } if + % next_string next_index next_number + 3 1 roll + % next_nubmer next_string next_index + } loop +} bind def + +/apush { + % array new_item + exch aload length 1 add array astore +} bind def + +/apop { + aload length 1 sub array astore exch +} bind def + +/datafile (%stdin) (r) file def + +% (X-Y) -> X Y +/parse-pair { + (-) search + not { stop } if + % (Y) (-) (X) + exch pop + % (Y) (X) + str_to_int + exch + str_to_int + % X Y +} bind def + +% (I-J,K-L) -> I J K L +/parse-line { + (,) search + not { stop } if + % (K-L) (,) (I-J) + exch pop + % (K-L) (I-J) + parse-pair + 3 2 roll + % I J (K-L) + parse-pair + % I J K L +} bind def + +/data [ + { + datafile 100 string readline + not {pop exit} if + % line + parse-line + % I J K L + 4 array astore + % [I J K L] + } loop +] def + +/stderr (%stderr) (w) file def + +/Helvetica 20 selectfont + +(First Puzzle: ) +72 700 moveto show +0 data { + % accumulator cur-array + aload pop + % accumulator first1 last1 first2 last2 +% 3 index int_to_str stderr exch writestring stderr 32 write +% 2 index int_to_str stderr exch writestring stderr 32 write +% 1 index int_to_str stderr exch writestring stderr 32 write +% dup int_to_str stderr exch writestring stderr 32 write + % force first1 <= first2 + 3 index 2 index gt { + 4 2 roll + } if + % accumulator first1 last1 first2 last2 + 2 index 1 index ge + % accumulator first1 last1 first2 last2 last1>=last2? + 4 index 3 index eq or + % accumulator first1 last1 first2 last2 last1>=last2||first1==first2? + 5 1 roll pop pop pop pop + % accumulator last1>=last2||first1==first2? + { 1 add } if + % updated-accumulator +% dup int_to_str stderr exch writestring stderr 10 write +} forall +int_to_str show + + +(Second Puzzle: ) +72 664 moveto show +0 data { + % accumulator cur-array + aload pop + % accumulator first1 last1 first2 last2 + % force first1 <= first2 + 3 index 2 index gt { + 4 2 roll + } if + % accumulator first1 last1 first2 last2 + 3 copy pop ge + % accumulator first1 last1 first2 last2 last1>=first2? + 5 1 roll pop pop pop pop + % accumulator last1>=first2? + { 1 add } if + % updated-accumulator +} forall +int_to_str show + +showpage +quit + diff --git a/day04.txt b/day04.txt @@ -0,0 +1,6 @@ +2-4,6-8 +2-3,4-5 +5-7,7-9 +2-8,3-7 +6-6,4-6 +2-6,4-8