diff --git a/config.json b/config.json index 3d90234..af083ca 100644 --- a/config.json +++ b/config.json @@ -674,6 +674,14 @@ "prerequisites": [], "difficulty": 7 }, + { + "slug": "dominoes", + "name": "Dominoes", + "uuid": "fc4731ce-4274-4d44-bc42-42e9b9497e53", + "practices": [], + "prerequisites": [], + "difficulty": 7 + }, { "slug": "saddle-points", "name": "Saddle Points", diff --git a/exercises/practice/dominoes/.docs/instructions.md b/exercises/practice/dominoes/.docs/instructions.md new file mode 100644 index 0000000..75055b9 --- /dev/null +++ b/exercises/practice/dominoes/.docs/instructions.md @@ -0,0 +1,15 @@ +# Instructions + +Make a chain of dominoes. + +Compute a way to order a given set of domino stones so that they form a correct domino chain. +In the chain, the dots on one half of a stone must match the dots on the neighboring half of an adjacent stone. +Additionally, the dots on the halves of the stones without neighbors (the first and last stone) must match each other. + +For example given the stones `[2|1]`, `[2|3]` and `[1|3]` you should compute something +like `[1|2] [2|3] [3|1]` or `[3|2] [2|1] [1|3]` or `[1|3] [3|2] [2|1]` etc, where the first and last numbers are the same. + +For stones `[1|2]`, `[4|1]` and `[2|3]` the resulting chain is not valid: `[4|1] [1|2] [2|3]`'s first and last numbers are not the same. +4 != 3 + +Some test cases may use duplicate stones in a chain solution, assume that multiple Domino sets are being used. diff --git a/exercises/practice/dominoes/.docs/introduction.md b/exercises/practice/dominoes/.docs/introduction.md new file mode 100644 index 0000000..df248c2 --- /dev/null +++ b/exercises/practice/dominoes/.docs/introduction.md @@ -0,0 +1,13 @@ +# Introduction + +In Toyland, the trains are always busy delivering treasures across the city, from shiny marbles to rare building blocks. +The tracks they run on are made of colorful domino-shaped pieces, each marked with two numbers. +For the trains to move, the dominoes must form a perfect chain where the numbers match. + +Today, an urgent delivery of rare toys is on hold. +You've been handed a set of track pieces to inspect. +If they can form a continuous chain, the train will be on its way, bringing smiles across Toyland. +If not, the set will be discarded, and another will be tried. + +The toys are counting on you to solve this puzzle. +Will the dominoes connect the tracks and send the train rolling, or will the set be left behind? diff --git a/exercises/practice/dominoes/.meta/config.json b/exercises/practice/dominoes/.meta/config.json new file mode 100644 index 0000000..4704504 --- /dev/null +++ b/exercises/practice/dominoes/.meta/config.json @@ -0,0 +1,17 @@ +{ + "authors": [ + "erikschierboom" + ], + "files": { + "solution": [ + "dominoes.ua" + ], + "test": [ + "tests.ua" + ], + "example": [ + ".meta/example.ua" + ] + }, + "blurb": "Make a chain of dominoes." +} diff --git a/exercises/practice/dominoes/.meta/example.ua b/exercises/practice/dominoes/.meta/example.ua new file mode 100644 index 0000000..f3c290b --- /dev/null +++ b/exercises/practice/dominoes/.meta/example.ua @@ -0,0 +1,14 @@ +Merge ← ⍣( + ⊂⊓⊢⊣ ◡(⍤. =⊓⊣⊢) +| ⊂∩⊢ ◡(⍤. =∩⊣) +) +Rotations ← ≡↻⊃(⇡⧻|¤) +CanChain ← |1 ⨬( + 1 +| ≍≡⇌. +| °⊂ + ⊙Rotations + ≡⊂¤ + ≡(⍣(CanChain ⍜(↙2|Merge °⊟)) 0) + /↥ +) ↧2⧻. diff --git a/exercises/practice/dominoes/.meta/tests.toml b/exercises/practice/dominoes/.meta/tests.toml new file mode 100644 index 0000000..08c8e08 --- /dev/null +++ b/exercises/practice/dominoes/.meta/tests.toml @@ -0,0 +1,49 @@ +# This is an auto-generated file. +# +# Regenerating this file via `configlet sync` will: +# - Recreate every `description` key/value pair +# - Recreate every `reimplements` key/value pair, where they exist in problem-specifications +# - Remove any `include = true` key/value pair (an omitted `include` key implies inclusion) +# - Preserve any other key/value pair +# +# As user-added comments (using the # character) will be removed when this file +# is regenerated, comments can be added via a `comment` key. + +[31a673f2-5e54-49fe-bd79-1c1dae476c9c] +description = "empty input = empty output" + +[4f99b933-367b-404b-8c6d-36d5923ee476] +description = "singleton input = singleton output" + +[91122d10-5ec7-47cb-b759-033756375869] +description = "singleton that can't be chained" + +[be8bc26b-fd3d-440b-8e9f-d698a0623be3] +description = "three elements" + +[99e615c6-c059-401c-9e87-ad7af11fea5c] +description = "can reverse dominoes" + +[51f0c291-5d43-40c5-b316-0429069528c9] +description = "can't be chained" + +[9a75e078-a025-4c23-8c3a-238553657f39] +description = "disconnected - simple" + +[0da0c7fe-d492-445d-b9ef-1f111f07a301] +description = "disconnected - double loop" + +[b6087ff0-f555-4ea0-a71c-f9d707c5994a] +description = "disconnected - single isolated" + +[2174fbdc-8b48-4bac-9914-8090d06ef978] +description = "need backtrack" + +[167bb480-dfd1-4318-a20d-4f90adb4a09f] +description = "separate loops" + +[cd061538-6046-45a7-ace9-6708fe8f6504] +description = "nine elements" + +[44704c7c-3adb-4d98-bd30-f45527cf8b49] +description = "separate three-domino loops" diff --git a/exercises/practice/dominoes/dominoes.ua b/exercises/practice/dominoes/dominoes.ua new file mode 100644 index 0000000..2aa6061 --- /dev/null +++ b/exercises/practice/dominoes/dominoes.ua @@ -0,0 +1,3 @@ +# Check if dominoes can be chained +# Result ? Dominoes +CanChain ← |1 ⊙(⍤"Please implement CanChain" 0) diff --git a/exercises/practice/dominoes/tests.ua b/exercises/practice/dominoes/tests.ua new file mode 100644 index 0000000..390140d --- /dev/null +++ b/exercises/practice/dominoes/tests.ua @@ -0,0 +1,40 @@ +~ "dominoes.ua" ~ CanChain + +# Empty input = empty output +⍤⤙≍ 1 CanChain [] + +# Singleton input = singleton output +⍤⤙≍ 1 CanChain [1_1] + +# Singleton that can't be chained +⍤⤙≍ 0 CanChain [1_2] + +# Three elements +⍤⤙≍ 1 CanChain [1_2 3_1 2_3] + +# Can reverse dominoes +⍤⤙≍ 1 CanChain [1_2 1_3 2_3] + +# Can't be chained +⍤⤙≍ 0 CanChain [1_2 4_1 2_3] + +# Disconnected - simple +⍤⤙≍ 0 CanChain [1_1 2_2] + +# Disconnected - double loop +⍤⤙≍ 0 CanChain [1_2 2_1 3_4 4_3] + +# Disconnected - single isolated +⍤⤙≍ 0 CanChain [1_2 2_3 3_1 4_4] + +# Need backtrack +⍤⤙≍ 1 CanChain [1_2 2_3 3_1 2_4 2_4] + +# Separate loops +⍤⤙≍ 1 CanChain [1_2 2_3 3_1 1_1 2_2 3_3] + +# Nine elements +⍤⤙≍ 1 CanChain [1_2 5_3 3_1 1_2 2_4 1_6 2_3 3_4 5_6] + +# Separate three-domino loops +⍤⤙≍ 0 CanChain [1_2 2_3 3_1 4_5 5_6 6_4]