| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- using BenchmarkTools
- inputfile = joinpath(@__DIR__, "input.txt")
- input = readlines(inputfile)
- grid = input .|> collect .|> x -> parse.(Int, x)
- mgrid = permutedims(reduce(hcat, grid))
- solve1(mgrid) = begin
- fish = zeros(Int, size(mgrid))
- fish[begin, :] .= 1
- fish[end, :] .= 1
- fish[:, begin] .= 1
- fish[:, end] .= 1
- for i = 2:size(mgrid)[1]-1
- for j = 2:size(mgrid)[1]-1
- center = mgrid[i, j]
- if all(center .> mgrid[begin:i-1, j]) ||
- all(center .> mgrid[i+1:end, j]) ||
- all(center .> mgrid[i, begin:j-1]) ||
- all(center .> mgrid[i, j+1:end])
- fish[i, j] = 1
- end
- end
- end
- count(==(1), fish)
- end
- solve2(mgrid) = begin
- fish = zeros(Int, size(mgrid))
- for i = 2:size(mgrid)[1]-1
- for j = 2:size(mgrid)[1]-1
- sl = i + 1
- score_down = 1
- center = mgrid[i, j]
- while center > mgrid[sl, j] && sl <= size(mgrid)[1] - 1
- sl += 1
- score_down += 1
- end
- score_up = 1
- sl = i - 1
- while center > mgrid[sl, j] && sl >= 2
- sl -= 1
- score_up += 1
- end
- score_right = 1
- sl = j + 1
- while center > mgrid[i, sl] && sl <= size(mgrid)[1] - 1
- score_right += 1
- sl += 1
- end
- score_left = 1
- sl = j - 1
- while center > mgrid[i, sl] && sl >= 2
- score_left += 1
- sl -= 1
- end
- score = score_down * score_left * score_right * score_up
- fish[i, j] = score
- end
- end
- maximum(fish)
- end
- print((solve1(mgrid), solve2(mgrid)))
|