aboutsummaryrefslogtreecommitdiffstats
path: root/config/vdirsyncer
Commit message (Collapse)AuthorAgeFilesLines
* reset cloud passwordÓscar Nájera2022-05-051-1/+1
|
* contacts managementÓscar Nájera2021-08-251-0/+21
6'>36 37 38 39 40 41 42 43 44 45 46 47 48 49
using Test

function parse_input()
    stacks, instruct = open(f -> split(read(f, String), "\n\n"), "input")

    stacks_reversed = reverse(split(stacks, "\n"))
    number = parse.(Int, eachsplit(stacks_reversed[1]))
    crates = Dict(i => Char[] for i  number)

    for line  stacks_reversed[2:end]
        for (i, c)  enumerate(line[2:4:end])
            if c != ' '
                push!(crates[i], c)
            end
        end
    end

    instruction_regex = r"move (\d+) from (\d+) to (\d+)"
    crates,
    map(
        l -> parse.(Int, match(instruction_regex, l).captures),
        eachsplit(instruct, "\n", keepempty = false),
    )
end


function single_move!(crates, amount, from, to)
    for _ = 1:amount
        push!(crates[to], pop!(crates[from]))
    end
end

function bulk_move!(crates, amount, from, to)
    l = length(crates[from])
    push!(crates[to], splice!(crates[from], l-amount+1:l)...)
end

function solution(mover)
    crates, instructions = parse_input()
    for inst  instructions
        mover(crates, inst...)
    end
    join(crates[i][end] for i  sort(collect(keys(crates))))
end

@testset "solution" begin
    @test solution(single_move!) == "TPGVQPFDH"
    @test solution(bulk_move!) == "DMRDFRHHH"
end