puzzle.jl 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. using BenchmarkTools
  2. inputfile = joinpath(@__DIR__, "input.txt")
  3. input = readlines(inputfile)
  4. grid = input .|> collect .|> x -> parse.(Int, x)
  5. mgrid = permutedims(reduce(hcat, grid))
  6. solve1(mgrid) = begin
  7. fish = zeros(Int, size(mgrid))
  8. fish[begin, :] .= 1
  9. fish[end, :] .= 1
  10. fish[:, begin] .= 1
  11. fish[:, end] .= 1
  12. for i = 2:size(mgrid)[1]-1
  13. for j = 2:size(mgrid)[1]-1
  14. center = mgrid[i, j]
  15. if all(center .> mgrid[begin:i-1, j]) ||
  16. all(center .> mgrid[i+1:end, j]) ||
  17. all(center .> mgrid[i, begin:j-1]) ||
  18. all(center .> mgrid[i, j+1:end])
  19. fish[i, j] = 1
  20. end
  21. end
  22. end
  23. count(==(1), fish)
  24. end
  25. solve2(mgrid) = begin
  26. fish = zeros(Int, size(mgrid))
  27. for i = 2:size(mgrid)[1]-1
  28. for j = 2:size(mgrid)[1]-1
  29. sl = i + 1
  30. score_down = 1
  31. center = mgrid[i, j]
  32. while center > mgrid[sl, j] && sl <= size(mgrid)[1] - 1
  33. sl += 1
  34. score_down += 1
  35. end
  36. score_up = 1
  37. sl = i - 1
  38. while center > mgrid[sl, j] && sl >= 2
  39. sl -= 1
  40. score_up += 1
  41. end
  42. score_right = 1
  43. sl = j + 1
  44. while center > mgrid[i, sl] && sl <= size(mgrid)[1] - 1
  45. score_right += 1
  46. sl += 1
  47. end
  48. score_left = 1
  49. sl = j - 1
  50. while center > mgrid[i, sl] && sl >= 2
  51. score_left += 1
  52. sl -= 1
  53. end
  54. score = score_down * score_left * score_right * score_up
  55. fish[i, j] = score
  56. end
  57. end
  58. maximum(fish)
  59. end
  60. print((solve1(mgrid), solve2(mgrid)))