fix aoc helper, add day 2
This commit is contained in:
parent
30124c5410
commit
8c7ffecb0b
6
aoc.jl
6
aoc.jl
@ -16,11 +16,7 @@ function _cookie()
|
||||
end
|
||||
|
||||
function _get_input(year, day)
|
||||
res = HTTP.get(
|
||||
"https://adventofcode.com/$year/day/$day/input",
|
||||
cookies = _cookie(),
|
||||
headers = Dict("User-Agent", "git.fuckwit.dev/fuckwit/aoc2022/src/branch/master/aoc.jl by huanzodev@gmail.com")
|
||||
)
|
||||
res = HTTP.get("https://adventofcode.com/$year/day/$day/input", cookies = _cookie())
|
||||
if res.status ≠ 200
|
||||
error("Unable to fetch infput for AOC $year day $day")
|
||||
end
|
||||
|
2500
data/day_2.txt
Normal file
2500
data/day_2.txt
Normal file
File diff suppressed because it is too large
Load Diff
@ -13,7 +13,8 @@ cals_per_elf() {
|
||||
((tmp+=i))
|
||||
done
|
||||
cals+=("$tmp")
|
||||
utils.qsort "${cals[@]}"
|
||||
utils.insertion_sort cals
|
||||
echo "${cals[@]}"
|
||||
}
|
||||
|
||||
p1() {
|
||||
|
43
src/day_2.jl
Normal file
43
src/day_2.jl
Normal file
@ -0,0 +1,43 @@
|
||||
include(joinpath(readchomp(`git rev-parse --show-toplevel`), "aoc.jl"))
|
||||
import .Aoc: @aoc
|
||||
|
||||
win_conditions = Dict(
|
||||
"A X" => 3,
|
||||
"A Y" => 6,
|
||||
"A Z" => 0,
|
||||
"B X" => 0,
|
||||
"B Y" => 3,
|
||||
"B Z" => 6,
|
||||
"C X" => 6,
|
||||
"C Y" => 0,
|
||||
"C Z" => 3,
|
||||
)
|
||||
should_play = Dict(
|
||||
"A X" => 'Z',
|
||||
"A Y" => 'X',
|
||||
"A Z" => 'Y',
|
||||
"B X" => 'X',
|
||||
"B Y" => 'Y',
|
||||
"B Z" => 'Z',
|
||||
"C X" => 'Y',
|
||||
"C Y" => 'Z',
|
||||
"C Z" => 'X',
|
||||
)
|
||||
score_table = Dict('X' => 1, 'Y' => 2, 'Z' => 3)
|
||||
|
||||
function p1(input::Vector{String})
|
||||
sum([ win_conditions[i] + score_table[i[3]] for i in input ])
|
||||
end
|
||||
|
||||
function transform_input(x)
|
||||
arr = collect(x)
|
||||
arr[3] = should_play[x]
|
||||
join(arr)
|
||||
end
|
||||
|
||||
function p2(input::Vector{String})
|
||||
input = map(transform_input, input)
|
||||
sum([ win_conditions[i] + score_table[i[3]] for i in input ])
|
||||
end
|
||||
|
||||
@aoc(2022, 2)
|
26
utils.sh
26
utils.sh
@ -52,20 +52,34 @@ _int.merge() {
|
||||
((j+=1))
|
||||
done
|
||||
}
|
||||
_int.min_run() {
|
||||
local len="$1" r=0
|
||||
|
||||
while (( len >= 32 )); do
|
||||
r=$((r | (len & 1)))
|
||||
len=$((len >> 1))
|
||||
done
|
||||
echo $((len + r))
|
||||
}
|
||||
|
||||
utils.timsort() {
|
||||
local -n _utils_timsort_arr="$1"
|
||||
local len="${#_utils_timsort_arr[@]}"
|
||||
local min_run="$(_int.min_run "$len")"
|
||||
echo >&2 $len
|
||||
|
||||
for (( i=0; i < len; i+=32 )); do
|
||||
_int.insertion_sort _utils_timsort_arr "$i" "$(utils.min2 "$((i+32-1))" "$((len-1))")"
|
||||
for (( i=0; i < len; i+=min_run )); do
|
||||
echo >&2 _int.insertion_sort _utils_timsort_arr "$i" "$(utils.min2 "$((i+min_run-1))" "$((len-1))")"
|
||||
_int.insertion_sort _utils_timsort_arr "$i" "$(utils.min2 "$((i+min_run-1))" "$((len-1))")"
|
||||
done
|
||||
|
||||
for (( size=32; size < len; size=2*size )); do
|
||||
for (( size=min_run; size < len; size=2*size )); do
|
||||
for (( left=0; left < len; left+=2*size )); do
|
||||
local mid="$((left+size-1))"
|
||||
local right="$(utils.min2 "$((left+2*size-1))" "$((len-1))")"
|
||||
(( mid < right )) && _int.merge _utils_timsort_arr "$left" "$mid" "$right"
|
||||
local mid=$((left+size-1))
|
||||
local right=$(utils.min2 "$((left+2*size-1))" "$((len-1))")
|
||||
if (( mid < right )); then
|
||||
_int.merge _utils_timsort_arr "$left" "$mid" "$right"
|
||||
fi
|
||||
done
|
||||
done
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user