Day 2 cleanup
This commit is contained in:
parent
2ff3fbd672
commit
3b194c4302
4 changed files with 41 additions and 19 deletions
|
|
@ -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*."
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
2
run.sh
|
|
@ -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"
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue