| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- using BenchmarkTools
- using DataStructures
- using AbstractTrees
- inputfile = joinpath(@__DIR__, "example.txt")
- input = readlines(inputfile)
- struct Elemen
- name::String
- size::Int64
- loeqwe
- end
- struct TreeNode
- name::String
- size::In
- children::Vector{Int}
- end
- function read_files_size(input, Directory, line_number)
- println("we are in the $folder")
- println(input[line_number])
- dir = Dict()
- dir[folder] = Dict()
- dir["size"] = 0
- # dir["size"] = 0
- while line_number <= length(input) && !startswith(input[line_number], "\$ cd")
- println(input[line_number])
- if startswith(input[line_number], "\$ ls")
- line_number += 1
- elseif startswith(input[line_number], "dir")
- # dir[folder][input[line_number][5:end]] = Dict()
- # dir[folder][input[line_number][5:end]]["size"] = 0
- line_number += 1
- else
- dir["size"] += parse(Int, split(input[line_number])[1])
- line_number += 1
- end
- end
- if startswith(input[line_number], "\$ cd")
- println(input[line_number])
- if input[line_number][6:end] == ".."
- return dir
- else
- dir[folder] = read_files_size(input, input[line_number][6:end], line_number + 1)
- end
- end
- return dir
- end
- # fs = read_files_size(input, "/", 2)
- # -------------
- stack_based_solution() = begin
- stack = []; sizes = []
- for line in input
- if line == "\$ cd .."
- size = pop!(stack)
- append!(sizes, size)
- stack[end] += size
- elseif startswith(line, "\$ cd")
- append!(stack, 0)
- elseif isnumeric(line[1])
- stack[end] += parse(Int, split(line)[1])
- end
- end
- s = vcat(sizes, stack)
- f = s |> x->filter(y -> y < 100_000, x) |> sum
- s = s |> x->filter(y -> y >= maximum(x) - 40_000_000, x) |> minimum
- f, s
- end
- # @btime stack_based_solution()
|