You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

77 lines
1.6 KiB

#!/usr/bin/env julia
using DelimitedFiles
infile = size(ARGS, 1) > 0 ? ARGS[1] : "day6input.txt"
println("infile = ", infile)
fish = vec(readdlm(infile, ',', Int))
function simulate_lanternfish(fish, days)
fish = copy(fish)
for day in 1:days
newfish = 0
for i in 1:length(fish)
fish[i] -= 1
if fish[i] < 0
fish[i] = 6
newfish += 1
end
end
append!(fish, repeat([8], newfish))
end
return fish
end
fish18 = simulate_lanternfish(fish, 18)
fish80 = simulate_lanternfish(fish18, 80-18)
println("18 : ", length(fish18))
println("80 : ", length(fish80))
using OffsetArrays
function simulate2(fish, days)
fish_map = OffsetVector(zeros(Int, 9), 0:8)
for i in 1:length(fish)
fish_map[fish[i]] += 1
end
for day in 1:days
add_next = 0
for c in 8:-1:0
tmp = fish_map[c]
fish_map[c] = add_next
add_next = tmp
end
fish_map[8] = add_next
fish_map[6] += add_next
end
return sum(fish_map)
end
function simulate3(fish, days)
fish_map = zeros(Int, 9)
for i in 1:length(fish)
fish_map[fish[i]+1] += 1
end
for day in 1:days
fish_map = circshift(fish_map, -1)
fish_map[7] += fish_map[9]
end
return sum(fish_map)
end
println("18 : ", simulate2(fish, 18))
println("80 : ", simulate2(fish, 80))
println("256: ", simulate2(fish, 256))
println("18 : ", simulate3(fish, 18))
println("80 : ", simulate3(fish, 80))
println("256: ", simulate3(fish, 256))
using BenchmarkTools
@btime simulate2(fish, 256)
@btime simulate3(fish, 256)