main.jl 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. using BenchmarkTools
  2. selfdir = joinpath(splitdir(@__FILE__)[1], "input")
  3. data = parse.(Int, readlines(selfdir))
  4. #--------part1
  5. function check(preambula, number)
  6. for i in 1:25
  7. for j in (i+1):25
  8. if preambula[i] + preambula[j] == number
  9. return true
  10. end
  11. end
  12. end
  13. return false
  14. end
  15. function get_number()
  16. preambula = []
  17. is_valid = true
  18. for (ind, number) in enumerate(data)
  19. if (length(preambula) < 25)
  20. push!(preambula, number)
  21. else
  22. if !check(preambula, number)
  23. return ind, number
  24. else
  25. popfirst!(preambula)
  26. push!(preambula, number)
  27. end
  28. end
  29. end
  30. end
  31. #--------part2
  32. function get_weakness_number(ind)
  33. for i in 1:ind
  34. vv = data[i]
  35. for j in (1+i):ind
  36. vv += data[j]
  37. if vv == data[ind]
  38. min, max = minimum(data[i:j]), maximum(data[i:j])
  39. return i, j, min, max, min+max
  40. elseif vv > data[ind]
  41. break
  42. else
  43. continue
  44. end
  45. end
  46. end
  47. end
  48. continious_set = []
  49. for number in data[1:549]
  50. _sum = reduce(+, continious_set, init=0)
  51. if _sum == data[549]
  52. return continious_set, min(continious_set) + max(continious_set)
  53. elseif _sum < data[549]
  54. push!(continious_set, number)
  55. # println("$_sum fewer $(data[549])")
  56. else
  57. while _sum >= data[549]
  58. # println("$_sum bigger $(data[549])")
  59. popfirst!(continious_set)
  60. _sum = reduce(+, continious_set, init=0)
  61. if _sum == data[549]
  62. return continious_set, min(continious_set) + max(continious_set)
  63. end
  64. end
  65. end
  66. return "pidor"
  67. end
  68. #--------evaluation
  69. part1 = @btime get_number()
  70. part2 = @btime get_weakness_number(part1[1])