aoc-all

My solutions to all Advent of Code
git clone https://git.instinctive.eu/aoc-all.git
Log | Files | Refs | README | LICENSE

day10.ps (3639B)


      1 %!PS
      2 %
      3 % Copyright (c) 2022, Natacha Porté
      4 %
      5 % Permission to use, copy, modify, and distribute this software for any
      6 % purpose with or without fee is hereby granted, provided that the above
      7 % copyright notice and this permission notice appear in all copies.
      8 %
      9 % THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
     10 % WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
     11 % MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
     12 % ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
     13 % WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
     14 % ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
     15 % OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
     16 %
     17 % Usage:
     18 % gs -q- -sDEVICE=png16m -o- day09.ps <day09.txt | display
     19 
     20 /datafile (%stdin) (r) file def
     21 /stderr (%stderr) (w) file def
     22 
     23 % crt reg-dict prev-cycle-count register
     24 %   -> crt reg-dict cycle-count register
     25 /next-cycle {
     26   % crt reg-dict prev-cycle-count register
     27   exch 1 add exch
     28   % crt reg-dict cycle-count register
     29   3 copy pop known
     30   % crt reg-dict cycle-count register save-reg?
     31   { 3 copy put } if
     32   % crt reg-dict cycle-count register
     33   1 index 1 sub 40 mod
     34   % crt reg-dict cycle-count register cur-column
     35   1 index sub abs 1 le
     36   % crt reg-dict cycle-count register sprite-visible?
     37   { 3 index 2 index 1 sub 35 put } if
     38   % crt reg-dict cycle-count register
     39 } bind def
     40 
     41 % crt reg-dict cycle-count register line
     42 %   -> crt reg-dict cycle-count register
     43 /run-line {
     44   % crt reg-dict prev-cycle-count prev-register line
     45   dup (noop) eq {
     46     % crt reg-dict prev-cycle-count prev-register line
     47     pop
     48     % crt reg-dict prev-cycle-count prev-register
     49     next-cycle
     50     % crt reg-dict cycle-count register
     51   }
     52   {
     53     % crt reg-dict prev-cycle-count prev-register line
     54     (addx ) anchorsearch
     55     not { 1.125 pstack quit } if
     56     % crt reg-dict prev-cycle-count prev-register (operand) (addx )
     57     pop cvi
     58     % crt reg-dict prev-cycle-count prev-register operand
     59     5 1 roll
     60     % operand crt reg-dict prev-cycle-count prev-register
     61     next-cycle next-cycle
     62     % operand crt reg-dict cycle-count prev-register
     63     5 4 roll
     64     % crt reg-dict cycle-count prev-register operand
     65     add
     66     % crt reg-dict cycle-count register
     67   }
     68   ifelse
     69   % crt reg-dict cycle-count register
     70 } bind def
     71 
     72 /rawdata [
     73   {
     74     datafile 100 string readline
     75     not { pop exit } if
     76   } loop
     77 ] def
     78 
     79 /Helvetica 20 selectfont
     80 
     81 (................................................................................................................................................................................................................................................)
     82 <<
     83    20 0
     84    60 0
     85   100 0
     86   140 0
     87   180 0
     88   220 0
     89 >>
     90 0 1
     91 % crt reg-dict cycle-count register
     92 rawdata { run-line } forall
     93 % crt reg-dict cycle-count register
     94 
     95 
     96 (First Puzzle: )
     97 72 700 moveto show
     98 % crt reg-dict cycle-count register
     99 0 3 index {
    100   % accumulator key value
    101   mul add
    102   % updated-accumulator
    103 } forall
    104 15 string cvs show
    105 
    106 (Second Puzzle: )
    107 72 664 moveto show
    108 % crt reg-dict cycle-count register
    109 
    110 /Courier-Bold 20 selectfont
    111 0 1 5 index length 40 idiv 1 sub {
    112   % crt reg-dict cycle-count register line-number
    113   dup 20 mul 644 exch sub
    114   % crt reg-dict cycle-count register line-number y
    115   72 exch moveto
    116   % crt reg-dict cycle-count register line-number
    117   dup 40 mul
    118   % crt reg-dict cycle-count register line-number crt-offset
    119   5 index exch 40 getinterval
    120   % crt reg-dict cycle-count register line-number (line)
    121   show
    122   % crt reg-dict cycle-count register line-number
    123   pop
    124 } for
    125 
    126 showpage
    127 quit