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) (expand-file-name "run.sh" aoc-root)
args)) args))
(win (selected-window))) (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) (unless (eq (window-buffer win) buf)
(pop-to-buffer buf 'display-buffer-use-least-recent-window)) (if prefix
(message "./run.sh %s" (string-join (mapcar #'shell-quote-argument args) " ")) (pop-to-buffer buf 'display-buffer-use-least-recent-window)
(unless prefix (select-window win)))) (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) (defun aoc-copy-part-answer (part)
"Copy the answer for the given PART from *aoc-output*." "Copy the answer for the given PART from *aoc-output*."

View file

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

View file

@ -20,7 +20,12 @@ AOC class extend [
self runPart: savedP2 part: 2 arg: inp. ] self runPart: savedP2 part: 2 arg: inp. ]
"TODO: save as an image?" "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 ---" "--- Scanf ---"
@ -117,7 +122,10 @@ Object extend [
] ]
Iterable 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 ] toList [ ^self toCollection: OrderedCollection ]
toBag [ ^self toCollection: Bag ] toBag [ ^self toCollection: Bag ]
toSet [ ^self toCollection: Set ] toSet [ ^self toCollection: Set ]
@ -159,3 +167,14 @@ BlockClosure extend [
Array extend [ Array extend [
letArrayInBlock: block [ ^block valueWithArguments: self ] 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
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"