Day 2 cleanup

This commit is contained in:
Beatrice Szilvasy 2024-12-02 13:14:49 +00:00
parent 2ff3fbd672
commit 3b194c4302
4 changed files with 41 additions and 19 deletions

View file

@ -54,10 +54,16 @@ With PREFIX, read input from the buffer."
(expand-file-name "run.sh" aoc-root)
args))
(win (selected-window)))
(set-process-sentinel
proc
(lambda (_proc msg)
(with-selected-window (get-buffer-window buf)
(recenter -1))))
(unless (eq (window-buffer win) buf)
(pop-to-buffer buf 'display-buffer-use-least-recent-window))
(message "./run.sh %s" (string-join (mapcar #'shell-quote-argument args) " "))
(unless prefix (select-window win))))
(if prefix
(pop-to-buffer buf 'display-buffer-use-least-recent-window)
(display-buffer buf 'display-buffer-use-least-recent-window)))
(message "./run.sh %s" (string-join (mapcar #'shell-quote-argument args) " "))))
(defun aoc-copy-part-answer (part)
"Copy the answer for the given PART from *aoc-output*."

View file

@ -1,26 +1,23 @@
Collection extend [
checkSafeStep: a to: b
[ |delta| (a < 1) | (b > self size) ifTrue: [^true].
delta := (self at: b) - (self at: a).
^(1 <= delta) & (delta <= 3) ]
[ (a < 1) | (b > self size) ifTrue: [^true].
^(self at: b) - (self at: a) between: 1 and: 3 ]
safetyFwd
[ | dp | dp := Array new: self size + 1.
(self size to: 0 by: -1) do: [
:i | | v |
v := i + 1 to: self size + 1.
v := v select: [ :j | self checkSafeStep: i to: j ].
v := v collect: [ :j | (dp at: (j + 1) ifAbsent: [0]) + (j - i - 1) ].
v := v fold: [ :l :r | l min: r ].
dp at: (i + 1) put: v ].
:i | i chain + 1;
to: i + 2; "or `self size + 1`, but only jumps of 1 are possible"
select: [ :j | self checkSafeStep: i to: j ];
collect: [ :j | (dp at: (j + 1) ifAbsent: [0]) + (j - i - 1) ];
minimum; >* [ :v | dp at: (i + 1) put: v ] ].
^dp at: 1 ]
safety [ ^self safetyFwd min: self reverse safetyFwd ]
]
AOC input: [ stdin toLines collect:
[ :ln | ((ln tokenize: ' ')
collect: [ :lvl | lvl scanf: '%d' with: [:e|e] ])
safety ] ];
AOC input: [ stdin toLines collect: [
:ln | ln chain tokenize: ' ';
collect: [ :lvl | lvl asNumber ]; safety ] ];
part1: 0; part2: 1;
result: [ :reports :damp | reports count: [ :it | it <= damp ] ];
finish

View file

@ -20,7 +20,12 @@ AOC class extend [
self runPart: savedP2 part: 2 arg: inp. ]
"TODO: save as an image?"
finish [ self run ]
finish
[ | startTime stopTime |
startTime := Time millisecondClock.
self run.
stopTime := Time millisecondClock.
stdout << 'Time elapsed: ' << (stopTime - startTime) << 'ms'; nl. ]
]
"--- Scanf ---"
@ -117,7 +122,10 @@ Object extend [
]
Iterable extend [
sum [ ^self fold: [ :l :r | l + r ] ]
sum [ ^self inject: 0 into: [ :l :r | l + r ] ]
minimum [ ^self inject: FloatD infinity into: [ :l :r | l min: r ] ]
maximum [ ^self inject: FloatD negativeInfinity into: [ :l :r | l max: r ] ]
toList [ ^self toCollection: OrderedCollection ]
toBag [ ^self toCollection: Bag ]
toSet [ ^self toCollection: Set ]
@ -159,3 +167,14 @@ BlockClosure extend [
Array extend [
letArrayInBlock: block [ ^block valueWithArguments: self ]
]
"Pipeline proxy class which forwards onto a boxed value"
nil subclass: MessageChain [
| val |
pipelineValue: v [ val := v ]
yourself [ ^val ]
doesNotUnderstand: msg [ val := msg reinvokeFor: val. ^val ]
>* block [ ^block value: val ]
MessageChain class >> new [ ^self basicNew ]
]
Object extend [ chain [ ^MessageChain new pipelineValue: self ] ]

2
run.sh
View file

@ -22,4 +22,4 @@ else
fi
fi
exec gst "days/utils.st" "days/day$DAYP.st" < "$AOC_INPUT"
exec gst -g "days/utils.st" "days/day$DAYP.st" < "$AOC_INPUT"