Add Dominoes exercise for Elixir track

This commit is contained in:
2025-04-30 10:25:00 -04:00
parent cbeda5d38b
commit 95c9a93dec
10 changed files with 303 additions and 0 deletions

View File

@@ -0,0 +1,74 @@
defmodule DominoesTest do
use ExUnit.Case
test "empty input = empty output" do
assert Dominoes.chain?([]) == true
end
test "singleton input = singleton output" do
assert Dominoes.chain?([{1, 1}]) == true
end
test "singleton that can't be chained" do
assert Dominoes.chain?([{1, 2}]) == false
end
test "three elements" do
assert Dominoes.chain?([{1, 2}, {3, 1}, {2, 3}]) == true
end
test "can reverse dominoes" do
assert Dominoes.chain?([{1, 2}, {1, 3}, {2, 3}]) == true
end
test "can't be chained" do
assert Dominoes.chain?([{1, 2}, {4, 1}, {2, 3}]) == false
end
test "disconnected - double loop" do
assert Dominoes.chain?([{1, 2}, {2, 1}, {3, 4}, {4, 3}]) == false
end
test "disconnected - single isolated" do
assert Dominoes.chain?([{1, 2}, {2, 3}, {3, 1}, {4, 4}]) == false
end
test "need backtrack" do
# a variation in which we have to turn but no duplicates
assert Dominoes.chain?([{1, 2}, {2, 3}, {3, 1}, {2, 4}, {2, 4}]) == true
end
test "separate loops" do
assert Dominoes.chain?([{1, 2}, {2, 3}, {3, 1}, {1, 1}, {2, 2}, {3, 3}]) == true
end
test "nine elements" do
assert Dominoes.chain?([
{1, 2},
{5, 3},
{3, 1},
{1, 2},
{2, 4},
{1, 6},
{2, 3},
{3, 4},
{5, 6}
]) == true
end
test "separate three-domino loops" do
refute Dominoes.chain?([{1, 2}, {2, 3}, {3, 1}, {4, 5}, {5, 6}, {6, 4}])
end
test "disconnected - simple" do
refute Dominoes.chain?([{1, 1}, {2, 2}])
end
test "first and last not matching" do
assert Dominoes.chain?([{1, 2}, {2, 3}, {3, 4}]) == false
end
test "wrong starting order" do
assert Dominoes.chain?([{2, 1}, {2, 3}, {3, 1}]) == true
end
end

View File

@@ -0,0 +1,2 @@
ExUnit.start()
ExUnit.configure(exclude: :pending, trace: true)