| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- using BenchmarkTools
- selfdir = joinpath(splitdir(@__FILE__)[1], "input")
- data = parse.(Int, readlines(selfdir))
- #--------part1
- function check(preambula, number)
- for i in 1:25
- for j in (i+1):25
- if preambula[i] + preambula[j] == number
- return true
- end
- end
- end
- return false
- end
- function get_number()
- preambula = []
- is_valid = true
- for (ind, number) in enumerate(data)
- if (length(preambula) < 25)
- push!(preambula, number)
- else
- if !check(preambula, number)
- return ind, number
- else
- popfirst!(preambula)
- push!(preambula, number)
- end
- end
- end
- end
- #--------part2
- function get_weakness_number(ind)
- for i in 1:ind
- vv = data[i]
- for j in (1+i):ind
- vv += data[j]
- if vv == data[ind]
- min, max = minimum(data[i:j]), maximum(data[i:j])
- return i, j, min, max, min+max
- elseif vv > data[ind]
- break
- else
- continue
- end
- end
- end
- end
- continious_set = []
- for number in data[1:549]
- _sum = reduce(+, continious_set, init=0)
- if _sum == data[549]
- return continious_set, min(continious_set) + max(continious_set)
- elseif _sum < data[549]
- push!(continious_set, number)
- # println("$_sum fewer $(data[549])")
- else
- while _sum >= data[549]
- # println("$_sum bigger $(data[549])")
- popfirst!(continious_set)
- _sum = reduce(+, continious_set, init=0)
- if _sum == data[549]
- return continious_set, min(continious_set) + max(continious_set)
- end
- end
- end
- return "pidor"
- end
- #--------evaluation
- part1 = @btime get_number()
- part2 = @btime get_weakness_number(part1[1])
|