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)
|
||||
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*."
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
2
run.sh
|
|
@ -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"
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue