diff --git a/config.json b/config.json index 4f9c189adf6dc..c565be8eb0e28 100644 --- a/config.json +++ b/config.json @@ -147,6 +147,15 @@ "filtering" ] }, + { + "slug": "etl", + "difficulty": 2, + "topics": [ + "arrays", + "strings", + "sorting" + ] + }, { "slug": "bob", "difficulty": 2, diff --git a/exercises/etl/etl.jl b/exercises/etl/etl.jl new file mode 100644 index 0000000000000..d4a757328def5 --- /dev/null +++ b/exercises/etl/etl.jl @@ -0,0 +1,4 @@ +function transform(input::AbstractArray) + +end + diff --git a/exercises/etl/example.jl b/exercises/etl/example.jl new file mode 100644 index 0000000000000..dd5e043c400bf --- /dev/null +++ b/exercises/etl/example.jl @@ -0,0 +1,11 @@ +function transform(input::Dict) + output = [] + for i = input + for j = map(lowercase, i[2]) + pair = (j, i[1]) + push!(output, pair) + end + end + Dict(output) +end + diff --git a/exercises/etl/runtests.jl b/exercises/etl/runtests.jl new file mode 100644 index 0000000000000..c1d97dcc23774 --- /dev/null +++ b/exercises/etl/runtests.jl @@ -0,0 +1,36 @@ +using Base.Test + +include("etl.jl") + +@testset "a single letter" begin + input = Dict(1=>['A']) + output = Dict('a'=>1) + @test transform(input) == output +end + +@testset "single score with multiple letters" begin + input = Dict(1=>['A', 'E', 'I', 'O', 'U']) + output = Dict('a'=>1, 'e'=>1, 'i'=>1, 'o'=>1, 'u'=>1) + @test transform(input) == output +end + +@testset "multiple scores with multiple letters" begin + input = Dict(1=>['A', 'E'], 2=>['D', 'G']) + output = Dict('g'=>2, 'e'=>1, 'a'=>1, 'd'=>2) + @test transform(input) == output +end + +@testset "multiple scores with differing numbers of letters" begin + input = Dict(1=>[ 'A', 'E', 'I', 'O', 'U', 'L', 'N', 'R', 'S', 'T' ], + 2=>[ 'D', 'G' ], 3=>[ 'B', 'C', 'M', 'P' ], + 4=>[ 'F', 'H', 'V', 'W', 'Y' ], 5=>[ 'K' ], + 8=>[ 'J', 'X' ], 10=>[ 'Q', 'Z' ]) + output = Dict('a'=>1, 'b'=>3, 'c'=>3, 'd'=>2, 'e'=>1, + 'f'=>4, 'g'=>2, 'h'=>4, 'i'=>1, 'j'=>8, + 'k'=>5, 'l'=>1, 'm'=>3, 'n'=>1, 'o'=>1, + 'p'=>3, 'q'=>10, 'r'=>1, 's'=>1, 't'=>1, + 'u'=>1, 'v'=>4, 'w'=>4, 'x'=>8, 'y'=>4, + 'z'=>10) + @test transform(input) == output +end +