fix aoc helper, add day 2

This commit is contained in:
Patrick Michl 2022-12-02 07:42:26 +01:00
parent 30124c5410
commit 8c7ffecb0b
No known key found for this signature in database
GPG Key ID: BFE0ACEE21CD5EB0
5 changed files with 2566 additions and 12 deletions

6
aoc.jl
View File

@ -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

File diff suppressed because it is too large Load Diff

View File

@ -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
View 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)

View File

@ -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
}