Repository: exercism/clojure
Pull request #689 (2024-10-24 08:30:07)

Update lists concept
Quick update for the lists concept

* `cons` isn't used to add elements to the beginning of a list. This is a job for `conj`. Therefore, `cons` has been completely removed.
* `conj` does not append items to a list; it prepends them (adds to the beginning). This has been clarified.
* Added links to all functions
* Updated links.json


Patch:
diff --git a/_generators/zipper-generator.clj b/_generators/zipper-generator.clj
index 6ac5848..466a8e7 100644
--- a/_generators/zipper-generator.clj
+++ b/_generators/zipper-generator.clj
@@ -42,7 +42,7 @@
                         (:exercise (:canonical-data data)) "project.clj"))
           (str "(defproject " slug " \"0.1.0-SNAPSHOT\"
   :description \"" slug " exercise.\"
-  :url \"https://github.com/exercism/clojure/tree/master/exercises/" slug "\"
+  :url \"https://github.com/exercism/clojure/tree/main/exercises/practice/" slug "\"
   :dependencies [[org.clojure/clojure \"1.10.0\"]])
 "))))
 
diff --git a/concepts/lists/.meta/config.json b/concepts/lists/.meta/config.json
index bb8ee53..4e4843a 100644
--- a/concepts/lists/.meta/config.json
+++ b/concepts/lists/.meta/config.json
@@ -1,4 +1,11 @@
 {
   "blurb": "Lists are immutable, sequential collections representing function calls unless quoted.",
-  "authors": ["porkostomus", "bemself", "cstby"]
+  "authors": [
+    "porkostomus",
+    "bemself",
+    "cstby"
+  ],
+  "contributors": [
+    "tasxatzial"
+  ]
 }
diff --git a/concepts/lists/about.md b/concepts/lists/about.md
index b7687f4..b88e95e 100644
--- a/concepts/lists/about.md
+++ b/concepts/lists/about.md
@@ -3,17 +3,16 @@
 ## Key Learnings
 
 - Lists are collections.
-- Lists can be created using `list` or by using a single quote.
+- Lists can be created using [`list`][list] or by using a single quote.
 - Clojure will try to evaluate lists, treating the first item as a function.
 - Core functions:
-  - `cons` returns a list with the new item added to beginning.
-  - `first` returns the first item from a list.
-  - `rest` returns the list without the first item.
-  - `count` returns the number of items in the list.
-  - `conj` returns a list with items appended in it.
+  - [`first`][first] returns the first item in the list.
+  - [`rest`][rest] returns a list of all items of the list except the first.
+  - [`count`][count] returns the number of items in the list.
+  - [`conj`][conj] adds one or more items to the beginning of the list.
 
-## Additional Resources
-
-- [list - clojure.core | ClojureDocs](https://clojuredocs.org/clojure.core/list)
-- [Data Structures](https://clojure.org/reference/data_structures)
-- [Lists in Clojurescript](https://cljs.github.io/api/syntax/list)
+[list]: https://clojuredocs.org/clojure.core/list
+[first]: https://clojuredocs.org/clojure.core/first
+[rest]: https://clojuredocs.org/clojure.core/rest
+[count]: https://clojuredocs.org/clojure.core/count
+[conj]: https://clojuredocs.org/clojure.core/conj
diff --git a/concepts/lists/links.json b/concepts/lists/links.json
index 36bbabe..2333e7b 100644
--- a/concepts/lists/links.json
+++ b/concepts/lists/links.json
@@ -1,14 +1,6 @@
 [
-  {
-    "url": "https://clojuredocs.org/clojure.core/list",
-    "description": "list - clojure.core | ClojureDocs"
-  },
   {
     "url": "https://clojure.org/reference/data_structures",
     "description": "Data Structures"
-  },
-  {
-    "url": "https://cljs.github.io/api/syntax/list",
-    "description": "Lists in Clojurescript"
   }
 ]
diff --git a/config.json b/config.json
index 8081877..a2a1415 100644
--- a/config.json
+++ b/config.json
@@ -243,10 +243,9 @@
         "name": "Accumulate",
         "uuid": "49f62bbc-0f60-4922-b5a6-f266b80442f4",
         "practices": [],
-        "prerequisites": [
-          "numbers"
-        ],
+        "prerequisites": [],
         "difficulty": 2,
+        "status": "deprecated",
         "topics": [
           "algorithms, core_functions"
         ]
@@ -744,10 +743,9 @@
         "name": "Binary",
         "uuid": "daf3daed-61ef-4964-8d33-e7a739c7a470",
         "practices": [],
-        "prerequisites": [
-          "numbers"
-        ],
+        "prerequisites": [],
         "difficulty": 3,
+        "status": "deprecated",
         "topics": [
           "math"
         ]
@@ -856,10 +854,9 @@
         "name": "Hexadecimal",
         "uuid": "a4b1b39a-d942-4921-9b67-2bd913ff52a0",
         "practices": [],
-        "prerequisites": [
-          "numbers"
-        ],
+        "prerequisites": [],
         "difficulty": 3,
+        "status": "deprecated",
         "topics": [
           "math"
         ]
@@ -1019,11 +1016,9 @@
         "name": "Trinary",
         "uuid": "f8a7f5eb-e317-4ffa-bdef-6e30a36511eb",
         "practices": [],
-        "prerequisites": [
-          "numbers",
-          "strings"
-        ],
+        "prerequisites": [],
         "difficulty": 3,
+        "status": "deprecated",
         "topics": [
           "math"
         ]
@@ -1121,13 +1116,10 @@
         "slug": "octal",
         "name": "Octal",
         "uuid": "fa596153-0cbe-40e9-a4d6-1a66fe6ef7e5",
-        "practices": [
-          "numbers"
-        ],
-        "prerequisites": [
-          "numbers"
-        ],
+        "practices": [],
+        "prerequisites": [],
         "difficulty": 4,
+        "status": "deprecated",
         "topics": [
           "math"
         ]
@@ -1375,10 +1367,10 @@
         "practices": [],
         "prerequisites": [
           "lists",
-          "closures"
+          "closures",
+          "vectors"
         ],
-        "difficulty": 5,
-        "status": "wip"
+        "difficulty": 5
       }
     ]
   },
diff --git a/exercises/concept/annalyns-infiltration/.docs/hints.md b/exercises/concept/annalyns-infiltration/.docs/hints.md
index 9d417d4..df4899e 100644
--- a/exercises/concept/annalyns-infiltration/.docs/hints.md
+++ b/exercises/concept/annalyns-infiltration/.docs/hints.md
@@ -2,19 +2,19 @@
 
 ## 1. Check if a fast attack can be made
 
-We need to check if the knight is awake and _invert_ its truth value. This can be done with the [`not`][not] function.
+We need to check if the knight is awake and _invert_ the boolean value representing their state. This can be done with the [`not`][not] function.
 
 ## 2. Check if the group can be spied upon
 
-We want the function to return `true` if _any_ of the supplied predicates are `true`. This can be done using the [`or`][or] function.
+We want to return `true` if _any_ of the supplied predicates are `true`. This can be done with the [`or`][or] function.
 
-## 3. Check if the prisoner can be signalled
+## 3. Check if the prisoner can be signaled
 
 We want to return `true` if and only if _all_ of the supplied predicates are `true`. This can be done with the [`and`][and] function.
 
 ## 4. Check if the prisoner can be freed
 
-Here, we need to combine the three basic logical operators, [`and`][and], [`or`][or], and [`not`][not].
+We need to combine the three basic logical operators, [`and`][and], [`or`][or], and [`not`][not].
 
 [not]: https://clojuredocs.org/clojure.core/not
 [or]: https://clojuredocs.org/clojure.core/or
diff --git a/exercises/concept/annalyns-infiltration/.docs/instructions.md b/exercises/concept/annalyns-infiltration/.docs/instructions.md
index b5b7976..69563bf 100644
--- a/exercises/concept/annalyns-infiltration/.docs/instructions.md
+++ b/exercises/concept/annalyns-infiltration/.docs/instructions.md
@@ -1,26 +1,35 @@
 # Instructions
 
-In this exercise, you'll be implementing the quest logic for a new RPG game a friend is developing. The game's main character is Annalyn, a brave girl with a fierce and loyal pet dog. Unfortunately, disaster strikes, as her best friend was kidnapped while searching for berries in the forest. Annalyn will try to find and free her best friend, optionally taking her dog with her on this quest.
+In this exercise, you'll implement the quest logic for a new RPG game that a friend is developing.
+The game's main character is Annalyn, a brave girl with a fierce and loyal pet dog.
+Unfortunately, disaster strikes: her best friend was kidnapped while searching for berries in the forest.
+Annalyn will try to find and rescue her friend, optionally taking her dog along on the quest.
 
-After some time spent following her best friend's trail, she finds the camp in which her best friend is imprisoned. It turns out there are two kidnappers: a mighty knight and a cunning archer.
+After some time spent following the trail, Annalyn discovers the camp where her friend is imprisoned.
+It turns out there are two kidnappers: a mighty knight and a cunning archer.
 
 Having found the kidnappers, Annalyn considers which of the following actions she can engage in:
 
-- Fast attack: a fast attack can be made if the knight is sleeping, as it takes time for him to get his armor on, so he will be vulnerable.
-- Spy: the group can be spied upon if at least one of them is awake. Otherwise, spying is a waste of time.
-- Signal prisoner: the prisoner can be signalled using bird sounds if the prisoner is awake and the archer is sleeping, as archers are trained in bird signaling so they could intercept the message.
-- _Free prisoner_: Annalyn can try sneaking into the camp to free the prisoner.
-  This is a risky thing to do and can only succeed in one of two ways:
-  - If Annalyn has her pet dog with her she can rescue the prisoner if the archer is asleep.
+- Fast attack: a fast attack can be made if the knight is sleeping, as it takes time for him to put on his armor, leaving him vulnerable.
+- Spy: the group can be spied upon if at least one of them is awake.
+  Otherwise, spying is a waste of time.
+- Signal prisoner: the prisoner can be signaled using bird sounds if the prisoner is awake and the archer is sleeping.
+  Archers are trained in bird signaling and could intercept the message if they are awake.
+- _Free prisoner_: Annalyn can attempt to sneak into the camp to free the prisoner.
+  This is risky and can only succeed in one of two ways:
+  - If Annalyn has her pet dog, she can rescue the prisoner if the archer is asleep.
     The knight is scared of the dog and the archer will not have time to get ready before Annalyn and the prisoner can escape.
-  - If Annalyn does not have her dog then she and the prisoner must be very sneaky!
-    Annalyn can free the prisoner if the prisoner is awake and the knight and archer are both sleeping, but if the prisoner is sleeping they can't be rescued: the prisoner would be startled by Annalyn's sudden appearance and wake up the knight and archer.
+  - If Annalyn does not have her pet dog, then she and the prisoner must be very sneaky!
+    Annalyn can free the prisoner if the prisoner is awake and both the knight and archer are sleeping.
+    However, if the prisoner is sleeping, they can't be rescued, as the prisoner would be startled by Annalyn's sudden appearance and wake up the knight and archer.
 
-You have four tasks: to implement the logic for determining if the above actions are available based on the state of the three characters found in the forest and whether Annalyn's pet dog is present or not.
+You have four tasks: to implement the logic for determining if the above actions are available based on the state of the three characters in the forest and whether Annalyn's pet dog is present or not.
 
 ## 1. Check if a fast attack can be made
 
-Implement the `can-fast-attack?` function, which takes a boolean value indicating whether the knight is awake. The function returns `true` if a fast attack can be made based on the state of the knight. Otherwise, it returns `false`:
+Implement the `can-fast-attack?` function, which takes a boolean value indicating whether the knight is awake.
+The function returns `true` if a fast attack can be made based on the state of the knight.
+Otherwise, it returns `false`:
 
 ```clojure
 (def knight-awake? true)
@@ -31,7 +40,9 @@ Implement the `can-fast-attack?` function, which takes a boolean value indicatin
 
 ## 2. Check if the group can be spied upon
 
-Implement the `can-spy?` function, which takes three boolean values indicating whether the knight, archer and the prisoner, respectively, are awake. The function returns `true` if the group can be spied upon based on the state of the three characters. Otherwise, it returns `false`:
+Implement the `can-spy?` function, which takes three boolean values indicating whether the knight, archer, and prisoner, respectively, are awake.
+The function returns `true` if the group can be spied upon based on the state of the three characters.
+Otherwise, it returns `false`:
 
 ```clojure
 (def knight-awake? false)
@@ -42,9 +53,11 @@ Implement the `can-spy?` function, which takes three boolean values indicating w
 ;;=> true
 ```
 
-## 3. Check if the prisoner can be signalled
+## 3. Check if the prisoner can be signaled
 
-Implement the `can-signal-prisoner?` function, which takes two boolean values indicating whether the archer and the prisoner, respectively, are awake. The function returns `true` if the prisoner can be signalled based on the state of the two characters. Otherwise, it returns `false`:
+Implement the `can-signal-prisoner?` function, which takes two boolean values indicating whether the archer and the prisoner, respectively, are awake.
+The function returns `true` if the prisoner can be signaled based on the state of the two characters.
+Otherwise, it returns `false`:
 
 ```clojure
 (def archer-awake? false)
@@ -56,7 +69,11 @@ Implement the `can-signal-prisoner?` function, which takes two boolean values in
 
 ## 4. Check if the prisoner can be freed
 
-Implement the `can-free-prisoner?` function, which takes four boolean values. The first three parameters indicate whether the knight, archer and the prisoner, respectively, are awake. The last parameter indicates whether Annalyn's pet dog is present. The function returns `true` if the prisoner can be freed based on the state of the three characters and Annalyn's pet dog presence. Otherwise, it returns `false`:
+Implement the `can-free-prisoner?` function, which takes four boolean values.
+The first three parameters indicate whether the knight, archer, and prisoner, respectively, are awake.
+The last parameter indicates whether Annalyn's pet dog is present.
+The function returns `true` if the prisoner can be freed based on the state of the three characters and the presence of Annalyn's pet dog.
+Otherwise, it returns `false`:
 
 ```clojure
 (def knight-awake? false)
diff --git a/exercises/concept/card-games/.meta/config.json b/exercises/concept/card-games/.meta/config.json
index 662617a..0b22106 100644
--- a/exercises/concept/card-games/.meta/config.json
+++ b/exercises/concept/card-games/.meta/config.json
@@ -1,22 +1,21 @@
 {
-    "authors": [
-      "bobbicodes"
+  "authors": [
+    "bobbicodes"
+  ],
+  "files": {
+    "solution": [
+      "src/card_games.clj"
     ],
-    "forked_from": [
-        "python/card-games"
-      ],
-    "files": {
-      "solution": [
-        "src/card_games.clj"
-      ],
-      "test": [
-        "test/card_games_test.clj"
-      ],
-      "exemplar": [
-        ".meta/exemplar.clj"
-      ]
-    },
-    "icon": "poker",
-    "blurb": "Learn about lists by tracking hands in card games."
-  }
-  
\ No newline at end of file
+    "test": [
+      "test/card_games_test.clj"
+    ],
+    "exemplar": [
+      ".meta/exemplar.clj"
+    ]
+  },
+  "forked_from": [
+    "python/card-games"
+  ],
+  "icon": "poker",
+  "blurb": "Learn about lists by tracking hands in card games."
+}
diff --git a/exercises/concept/coordinate-transformation/.meta/config.json b/exercises/concept/coordinate-transformation/.meta/config.json
index 630754b..2436c78 100644
--- a/exercises/concept/coordinate-transformation/.meta/config.json
+++ b/exercises/concept/coordinate-transformation/.meta/config.json
@@ -1,11 +1,7 @@
 {
-  "blurb": "Practice your knowledge of closures by implementing various coordinate transformations.",
   "authors": [
     "bobbicodes"
   ],
-  "forked_from": [
-    "javascript/coordinate-transformation"
-  ],
   "files": {
     "solution": [
       "src/coordinate_transformation.clj"
@@ -16,5 +12,9 @@
     "exemplar": [
       ".meta/exemplar.clj"
     ]
-  }
-}
\ No newline at end of file
+  },
+  "forked_from": [
+    "javascript/coordinate-transformation"
+  ],
+  "blurb": "Practice your knowledge of closures by implementing various coordinate transformations."
+}
diff --git a/exercises/practice/accumulate/project.clj b/exercises/practice/accumulate/project.clj
index 980117a..943d535 100644
--- a/exercises/practice/accumulate/project.clj
+++ b/exercises/practice/accumulate/project.clj
@@ -1,4 +1,4 @@
 (defproject accumulate "0.1.0-SNAPSHOT"
   :description "accumulate exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/accumulate"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/accumulate"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/acronym/project.clj b/exercises/practice/acronym/project.clj
index 6415248..6d41d06 100644
--- a/exercises/practice/acronym/project.clj
+++ b/exercises/practice/acronym/project.clj
@@ -1,4 +1,4 @@
 (defproject acronym "0.1.0-SNAPSHOT"
   :description "acronym exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/acronym"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/acronym"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/all-your-base/project.clj b/exercises/practice/all-your-base/project.clj
index c17ec24..ca36c34 100644
--- a/exercises/practice/all-your-base/project.clj
+++ b/exercises/practice/all-your-base/project.clj
@@ -1,4 +1,4 @@
 (defproject all-your-base "0.1.0-SNAPSHOT"
   :description "all-your-base exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/all-your-base"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/all-your-base"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/allergies/project.clj b/exercises/practice/allergies/project.clj
index 53b1993..5f47fe5 100644
--- a/exercises/practice/allergies/project.clj
+++ b/exercises/practice/allergies/project.clj
@@ -1,4 +1,4 @@
 (defproject allergies "0.1.0-SNAPSHOT"
   :description "allergies exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/allergies"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/allergies"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/anagram/project.clj b/exercises/practice/anagram/project.clj
index fc583ea..2ec6e10 100644
--- a/exercises/practice/anagram/project.clj
+++ b/exercises/practice/anagram/project.clj
@@ -1,4 +1,4 @@
 (defproject anagram "0.1.0-SNAPSHOT"
   :description "anagram exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/anagram"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/anagram"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/armstrong-numbers/.meta/config.json b/exercises/practice/armstrong-numbers/.meta/config.json
index d6655ac..a39c443 100644
--- a/exercises/practice/armstrong-numbers/.meta/config.json
+++ b/exercises/practice/armstrong-numbers/.meta/config.json
@@ -7,7 +7,8 @@
     "imtayadeway",
     "mawis",
     "mtkp",
-    "sjwarner-bp"
+    "sjwarner-bp",
+    "tasxatzial"
   ],
   "files": {
     "solution": [
diff --git a/exercises/practice/armstrong-numbers/.meta/src/example.clj b/exercises/practice/armstrong-numbers/.meta/src/example.clj
index 3900b6e..db4ead2 100644
--- a/exercises/practice/armstrong-numbers/.meta/src/example.clj
+++ b/exercises/practice/armstrong-numbers/.meta/src/example.clj
@@ -1,7 +1,7 @@
 (ns armstrong-numbers)
 
 (defn expt [base pow]
-  (reduce * 1 (repeat pow base)))
+  (reduce *' 1 (repeat pow base)))
 
 (defn armstrong? [n]
   (let [digits (map (comp read-string str) (str n))
diff --git a/exercises/practice/armstrong-numbers/project.clj b/exercises/practice/armstrong-numbers/project.clj
index e30f69f..7e13358 100644
--- a/exercises/practice/armstrong-numbers/project.clj
+++ b/exercises/practice/armstrong-numbers/project.clj
@@ -1,4 +1,4 @@
 (defproject armstrong-numbers "0.1.0-SNAPSHOT"
   :description "armstrong-numbers exercise"
-  :url "https://github.com/exercism/clojure/tree/master/exercises/armstrong-numbers"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/armstrong-numbers"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/armstrong-numbers/src/armstrong_numbers.clj b/exercises/practice/armstrong-numbers/src/armstrong_numbers.clj
index da6002b..3d4e44a 100644
--- a/exercises/practice/armstrong-numbers/src/armstrong_numbers.clj
+++ b/exercises/practice/armstrong-numbers/src/armstrong_numbers.clj
@@ -1,5 +1,7 @@
 (ns armstrong-numbers)
 
-(defn armstrong? [num] ;; <- arglist goes here
-  ;; your code goes here
-)
+(defn armstrong?
+  "Returns true if the given number is an Armstrong number; otherwise, returns false"
+  [num]
+  ;; function body
+  )
diff --git a/exercises/practice/atbash-cipher/project.clj b/exercises/practice/atbash-cipher/project.clj
index 0dc3e5f..200f626 100644
--- a/exercises/practice/atbash-cipher/project.clj
+++ b/exercises/practice/atbash-cipher/project.clj
@@ -1,4 +1,4 @@
 (defproject atbash-cipher "0.1.0-SNAPSHOT"
   :description "atbash-cipher exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/atbash-cipher"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/atbash-cipher"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/bank-account/project.clj b/exercises/practice/bank-account/project.clj
index 634f909..9e58e81 100644
--- a/exercises/practice/bank-account/project.clj
+++ b/exercises/practice/bank-account/project.clj
@@ -1,4 +1,4 @@
 (defproject bank-account "0.1.0-SNAPSHOT"
   :description "bank-account exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/bank-account"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/bank-account"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/beer-song/project.clj b/exercises/practice/beer-song/project.clj
index ef74886..c8f4dbf 100644
--- a/exercises/practice/beer-song/project.clj
+++ b/exercises/practice/beer-song/project.clj
@@ -1,4 +1,4 @@
 (defproject beer-song "0.1.0-SNAPSHOT"
   :description "beer-song exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/beer-song"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/beer-song"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/binary-search-tree/project.clj b/exercises/practice/binary-search-tree/project.clj
index 2f99844..5b0844d 100644
--- a/exercises/practice/binary-search-tree/project.clj
+++ b/exercises/practice/binary-search-tree/project.clj
@@ -1,4 +1,4 @@
 (defproject binary-search-tree "0.1.0-SNAPSHOT"
   :description "binary-search-tree exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/binary-search-tree"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/binary-search-tree"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/binary-search/project.clj b/exercises/practice/binary-search/project.clj
index 9c5755a..d829381 100644
--- a/exercises/practice/binary-search/project.clj
+++ b/exercises/practice/binary-search/project.clj
@@ -1,4 +1,4 @@
 (defproject binary-search "0.1.0-SNAPSHOT"
   :description "binary-search exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/binary-search"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/binary-search"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/binary/project.clj b/exercises/practice/binary/project.clj
index 5529c12..db0f494 100644
--- a/exercises/practice/binary/project.clj
+++ b/exercises/practice/binary/project.clj
@@ -1,4 +1,4 @@
 (defproject binary "0.1.0-SNAPSHOT"
   :description "binary exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/binary"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/binary"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/bob/project.clj b/exercises/practice/bob/project.clj
index 2c1df3b..3a5a60c 100644
--- a/exercises/practice/bob/project.clj
+++ b/exercises/practice/bob/project.clj
@@ -1,4 +1,4 @@
 (defproject bob "0.1.0-SNAPSHOT"
   :description "bob exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/bob"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/bob"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/change/project.clj b/exercises/practice/change/project.clj
index 94d2da2..8466251 100644
--- a/exercises/practice/change/project.clj
+++ b/exercises/practice/change/project.clj
@@ -1,6 +1,6 @@
 (defproject change "0.1.0-SNAPSHOT"
   :description "[change] exercise"
-  :url "https://github.com/exercism/clojure/tree/master/exercises/change"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/change"
   :license {:name "Eclipse Public License"
             :url "http://www.eclipse.org/legal/epl-v10.html"}
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/clock/project.clj b/exercises/practice/clock/project.clj
index 591ecc6..c8851a7 100644
--- a/exercises/practice/clock/project.clj
+++ b/exercises/practice/clock/project.clj
@@ -1,4 +1,4 @@
 (defproject clock "0.1.0-SNAPSHOT"
   :description "clock exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/clock"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/clock"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/collatz-conjecture/project.clj b/exercises/practice/collatz-conjecture/project.clj
index 3c5a39d..8382043 100644
--- a/exercises/practice/collatz-conjecture/project.clj
+++ b/exercises/practice/collatz-conjecture/project.clj
@@ -1,4 +1,4 @@
 (defproject collatz-conjecture "0.1.0-SNAPSHOT"
   :description "collatz-conjecture exercise"
-  :url "https://github.com/exercism/clojure/tree/master/exercises/collatz-conjecture"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/collatz-conjecture"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/complex-numbers/.docs/instructions.append.md b/exercises/practice/complex-numbers/.docs/instructions.append.md
index 1c6bfad..0d6dbb2 100644
--- a/exercises/practice/complex-numbers/.docs/instructions.append.md
+++ b/exercises/practice/complex-numbers/.docs/instructions.append.md
@@ -1,4 +1,10 @@
 # Instructions append
 
-**Note:** The instructions ask for the exponent function because they are synced with a shared repository to maintain consistency across all language tracks.
-However, for this exercise in the Clojure track, you don't need to implement it.
+## Appendix
+
+~~~~exercism/note
+The instructions above are synchronized with a shared repository to ensure consistency across all language tracks.
+This appendix provides additional clarification or modifies the instructions as needed to better align with the goals of the Clojure track.
+~~~~
+
+For this exercise in the Clojure track, you don't need to implement the exponentiation operation.
diff --git a/exercises/practice/complex-numbers/.docs/instructions.md b/exercises/practice/complex-numbers/.docs/instructions.md
index 50b19ae..2b8a7a4 100644
--- a/exercises/practice/complex-numbers/.docs/instructions.md
+++ b/exercises/practice/complex-numbers/.docs/instructions.md
@@ -1,29 +1,100 @@
 # Instructions
 
-A complex number is a number in the form `a + b * i` where `a` and `b` are real and `i` satisfies `i^2 = -1`.
+A **complex number** is expressed in the form `z = a + b * i`, where:
 
-`a` is called the real part and `b` is called the imaginary part of `z`.
-The conjugate of the number `a + b * i` is the number `a - b * i`.
-The absolute value of a complex number `z = a + b * i` is a real number `|z| = sqrt(a^2 + b^2)`. The square of the absolute value `|z|^2` is the result of multiplication of `z` by its complex conjugate.
+- `a` is the **real part** (a real number),
 
-The sum/difference of two complex numbers involves adding/subtracting their real and imaginary parts separately:
-`(a + i * b) + (c + i * d) = (a + c) + (b + d) * i`,
-`(a + i * b) - (c + i * d) = (a - c) + (b - d) * i`.
+- `b` is the **imaginary part** (also a real number), and
 
-Multiplication result is by definition
-`(a + i * b) * (c + i * d) = (a * c - b * d) + (b * c + a * d) * i`.
+- `i` is the **imaginary unit** satisfying `i^2 = -1`.
 
-The reciprocal of a non-zero complex number is
-`1 / (a + i * b) = a/(a^2 + b^2) - b/(a^2 + b^2) * i`.
+## Operations on Complex Numbers
 
-Dividing a complex number `a + i * b` by another `c + i * d` gives:
-`(a + i * b) / (c + i * d) = (a * c + b * d)/(c^2 + d^2) + (b * c - a * d)/(c^2 + d^2) * i`.
+### Conjugate
 
-Raising e to a complex exponent can be expressed as `e^(a + i * b) = e^a * e^(i * b)`, the last term of which is given by Euler's formula `e^(i * b) = cos(b) + i * sin(b)`.
+The conjugate of the complex number `z = a + b * i` is given by:
 
-Implement the following operations:
+```text
+zc = a - b * i
+```
 
-- addition, subtraction, multiplication and division of two complex numbers,
-- conjugate, absolute value, exponent of a given complex number.
+### Absolute Value
 
-Assume the programming language you are using does not have an implementation of complex numbers.
+The absolute value (or modulus) of `z` is defined as:
+
+```text
+|z| = sqrt(a^2 + b^2)
+```
+
+The square of the absolute value is computed as the product of `z` and its conjugate `zc`:
+
+```text
+|z|^2 = z * zc = a^2 + b^2
+```
+
+### Addition
+
+The sum of two complex numbers `z1 = a + b * i` and `z2 = c + d * i` is computed by adding their real and imaginary parts separately:
+
+```text
+z1 + z2 = (a + b * i) + (c + d * i)
+        = (a + c) + (b + d) * i
+```
+
+### Subtraction
+
+The difference of two complex numbers is obtained by subtracting their respective parts:
+
+```text
+z1 - z2 = (a + b * i) - (c + d * i)
+        = (a - c) + (b - d) * i
+```
+
+### Multiplication
+
+The product of two complex numbers is defined as:
+
+```text
+z1 * z2 = (a + b * i) * (c + d * i)
+        = (a * c - b * d) + (b * c + a * d) * i
+```
+
+### Reciprocal
+
+The reciprocal of a non-zero complex number is given by:
+
+```text
+1 / z = 1 / (a + b * i)
+      = a / (a^2 + b^2) - b / (a^2 + b^2) * i
+```
+
+### Division
+
+The division of one complex number by another is given by:
+
+```text
+z1 / z2 = z1 * (1 / z2)
+        = (a + b * i) / (c + d * i)
+        = (a * c + b * d) / (c^2 + d^2) + (b * c - a * d) / (c^2 + d^2) * i
+```
+
+### Exponentiation
+
+Raising _e_ (the base of the natural logarithm) to a complex exponent can be expressed using Euler's formula:
+
+```text
+e^(a + b * i) = e^a * e^(b * i)
+              = e^a * (cos(b) + i * sin(b))
+```
+
+## Implementation Requirements
+
+Given that you should not use built-in support for complex numbers, implement the following operations:
+
+- **addition** of two complex numbers
+- **subtraction** of two complex numbers
+- **multiplication** of two complex numbers
+- **division** of two complex numbers
+- **conjugate** of a complex number
+- **absolute value** of a complex number
+- **exponentiation** of _e_ (the base of the natural logarithm) to a complex number
diff --git a/exercises/practice/complex-numbers/project.clj b/exercises/practice/complex-numbers/project.clj
index 3ea7dba..3290789 100644
--- a/exercises/practice/complex-numbers/project.clj
+++ b/exercises/practice/complex-numbers/project.clj
@@ -1,4 +1,4 @@
 (defproject complex-numbers "0.1.0-SNAPSHOT"
   :description "complex-numbers exercise"
-  :url "https://github.com/exercism/clojure/tree/master/exercises/complex-numbers"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/complex-numbers"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/crypto-square/project.clj b/exercises/practice/crypto-square/project.clj
index cfd1c81..5f133f8 100644
--- a/exercises/practice/crypto-square/project.clj
+++ b/exercises/practice/crypto-square/project.clj
@@ -1,4 +1,4 @@
 (defproject crypto-square "0.1.0-SNAPSHOT"
   :description "crypto-square exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/crypto-square"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/crypto-square"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/difference-of-squares/project.clj b/exercises/practice/difference-of-squares/project.clj
index d408a87..bd15736 100644
--- a/exercises/practice/difference-of-squares/project.clj
+++ b/exercises/practice/difference-of-squares/project.clj
@@ -1,4 +1,4 @@
 (defproject difference-of-squares "0.1.0-SNAPSHOT"
   :description "difference-of-squares exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/difference-of-squares"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/difference-of-squares"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/dominoes/.meta/config.json b/exercises/practice/dominoes/.meta/config.json
index ca3f760..f2060e5 100644
--- a/exercises/practice/dominoes/.meta/config.json
+++ b/exercises/practice/dominoes/.meta/config.json
@@ -3,7 +3,8 @@
   "contributors": [
     "AndreaCrotti",
     "haus",
-    "sjwarner-bp"
+    "sjwarner-bp",
+    "tasxatzial"
   ],
   "files": {
     "solution": [
diff --git a/exercises/practice/dominoes/project.clj b/exercises/practice/dominoes/project.clj
index 2cd3d4b..33f65a9 100644
--- a/exercises/practice/dominoes/project.clj
+++ b/exercises/practice/dominoes/project.clj
@@ -1,4 +1,4 @@
 (defproject dominoes "0.1.0-SNAPSHOT"
   :description "dominoes exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/dominoes"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/dominoes"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/dominoes/src/dominoes.clj b/exercises/practice/dominoes/src/dominoes.clj
index d0dceb2..315d6a4 100644
--- a/exercises/practice/dominoes/src/dominoes.clj
+++ b/exercises/practice/dominoes/src/dominoes.clj
@@ -1,5 +1,7 @@
 (ns dominoes)
 
-(defn can-chain? [] ;; <- arglist goes here
-  ;; your code goes here
-)
+(defn can-chain?
+  "Given a collection of dominoes, it returns true if they can be arranged into a chain; otherwise, it returns false"
+  [dominoes]
+  ;; function body
+  )
\ No newline at end of file
diff --git a/exercises/practice/eliuds-eggs/project.clj b/exercises/practice/eliuds-eggs/project.clj
index d73dacf..3a36273 100644
--- a/exercises/practice/eliuds-eggs/project.clj
+++ b/exercises/practice/eliuds-eggs/project.clj
@@ -1,4 +1,4 @@
 (defproject eliuds-eggs "0.1.0-SNAPSHOT"
   :description "eliuds-eggs exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/eliuds-eggs"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/eliuds-eggs"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/etl/project.clj b/exercises/practice/etl/project.clj
index 7f4af04..e6d26f2 100644
--- a/exercises/practice/etl/project.clj
+++ b/exercises/practice/etl/project.clj
@@ -1,4 +1,4 @@
 (defproject etl "0.1.0-SNAPSHOT"
   :description "etl exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/etl"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/etl"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/flatten-array/project.clj b/exercises/practice/flatten-array/project.clj
index d1ffa46..8a4d7b1 100644
--- a/exercises/practice/flatten-array/project.clj
+++ b/exercises/practice/flatten-array/project.clj
@@ -1,4 +1,4 @@
 (defproject flatten-array "0.1.0-SNAPSHOT"
   :description "flatten-array exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/flatten-array"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/flatten-array"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/gigasecond/project.clj b/exercises/practice/gigasecond/project.clj
index 3502143..76a9962 100644
--- a/exercises/practice/gigasecond/project.clj
+++ b/exercises/practice/gigasecond/project.clj
@@ -1,4 +1,4 @@
 (defproject gigasecond "0.1.0-SNAPSHOT"
   :description "gigasecond exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/gigasecond"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/gigasecond"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/go-counting/project.clj b/exercises/practice/go-counting/project.clj
index 8c1840f..003195e 100644
--- a/exercises/practice/go-counting/project.clj
+++ b/exercises/practice/go-counting/project.clj
@@ -1,4 +1,4 @@
 (defproject go-counting "0.1.0-SNAPSHOT"
   :description "go-counting exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/go-counting"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/go-counting"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/grade-school/project.clj b/exercises/practice/grade-school/project.clj
index fd3005d..3df3b58 100644
--- a/exercises/practice/grade-school/project.clj
+++ b/exercises/practice/grade-school/project.clj
@@ -1,4 +1,4 @@
 (defproject grade-school "0.1.0-SNAPSHOT"
   :description "grade-school exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/grade-school"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/grade-school"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/grains/project.clj b/exercises/practice/grains/project.clj
index 4b583e0..c4f8851 100644
--- a/exercises/practice/grains/project.clj
+++ b/exercises/practice/grains/project.clj
@@ -1,4 +1,4 @@
 (defproject grains "0.1.0-SNAPSHOT"
   :description "grains exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/grains"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/grains"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/hamming/project.clj b/exercises/practice/hamming/project.clj
index 5207598..96fe25f 100644
--- a/exercises/practice/hamming/project.clj
+++ b/exercises/practice/hamming/project.clj
@@ -1,4 +1,4 @@
 (defproject hamming "0.1.0-SNAPSHOT"
   :description "hamming exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/hamming"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/hamming"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/hello-world/project.clj b/exercises/practice/hello-world/project.clj
index b6b1aec..6cab18f 100644
--- a/exercises/practice/hello-world/project.clj
+++ b/exercises/practice/hello-world/project.clj
@@ -1,4 +1,4 @@
 (defproject hello-world "0.1.0-SNAPSHOT"
   :description "hello-world exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/hello-world"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/hello-world"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/hexadecimal/project.clj b/exercises/practice/hexadecimal/project.clj
index 119c4f7..19a89e8 100644
--- a/exercises/practice/hexadecimal/project.clj
+++ b/exercises/practice/hexadecimal/project.clj
@@ -1,4 +1,4 @@
 (defproject hexadecimal "0.1.0-SNAPSHOT"
   :description "hexadecimal exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/hexadecimal"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/hexadecimal"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/isbn-verifier/project.clj b/exercises/practice/isbn-verifier/project.clj
index 181db1d..4285d88 100644
--- a/exercises/practice/isbn-verifier/project.clj
+++ b/exercises/practice/isbn-verifier/project.clj
@@ -1,4 +1,4 @@
 (defproject isbn-verifier "0.1.0-SNAPSHOT"
   :description "isbn-verifier xercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/isbn-verifier"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/isbn-verifier"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/isogram/project.clj b/exercises/practice/isogram/project.clj
index faf6a6e..273bac4 100644
--- a/exercises/practice/isogram/project.clj
+++ b/exercises/practice/isogram/project.clj
@@ -1,4 +1,4 @@
 (defproject isogram "0.1.0-SNAPSHOT"
   :description "isogram exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/isogram"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/isogram"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/kindergarten-garden/project.clj b/exercises/practice/kindergarten-garden/project.clj
index 506db11..4b44d0b 100644
--- a/exercises/practice/kindergarten-garden/project.clj
+++ b/exercises/practice/kindergarten-garden/project.clj
@@ -1,4 +1,4 @@
 (defproject kindergarten-garden "0.1.0-SNAPSHOT"
   :description "kindergarten-garden exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/kindergarten-garden"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/kindergarten-garden"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/largest-series-product/project.clj b/exercises/practice/largest-series-product/project.clj
index a075b0d..7260309 100644
--- a/exercises/practice/largest-series-product/project.clj
+++ b/exercises/practice/largest-series-product/project.clj
@@ -1,4 +1,4 @@
 (defproject largest-series-product "0.1.0-SNAPSHOT"
   :description "largest-series-product exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/largest-series-product"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/largest-series-product"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/leap/project.clj b/exercises/practice/leap/project.clj
index 70a196a..2ca0036 100644
--- a/exercises/practice/leap/project.clj
+++ b/exercises/practice/leap/project.clj
@@ -1,4 +1,4 @@
 (defproject leap "0.1.0-SNAPSHOT"
   :description "leap exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/leap"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/leap"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/list-ops/.docs/instructions.append.md b/exercises/practice/list-ops/.docs/instructions.append.md
index e226d47..7553c97 100644
--- a/exercises/practice/list-ops/.docs/instructions.append.md
+++ b/exercises/practice/list-ops/.docs/instructions.append.md
@@ -1,8 +1,27 @@
-# Instructions append
-
-## Implementation tips
-
-- The instructions use lists because they are synced with a shared repository to maintain consistency across tracks.
-  However, for this exercise in the Clojure track, you should assume that you are working with vectors instead of lists.
-- It is important not to reuse existing Clojure built-in functions with similar functionality, as doing so would diminish the intended learning value of the exercise.
-  Some of these functions include `into`, `concat`, `cat`, `lazy-cat`, `mapcat`, `flatten`, `filter`, `filterv`, `remove`, `count`, `map`, `mapv`, `reduce`, `transduce`, `reverse`, and `rseq` from the **clojure.core** namespace.
+# Instructions append
+
+## Appendix
+
+~~~~exercism/note
+The instructions above are synchronized with a shared repository to ensure consistency across all language tracks.
+This appendix provides additional clarification or modifies the instructions as needed to better align with the goals of the Clojure track.
+~~~~
+
+For this exercise in the Clojure track, **assume both the input and output are vectors**, as indicated by the tests.
+As a stretch goal, consider how to implement an approach that does not use lists for intermediate steps.
+
+It is important not to reuse existing Clojure built-in functions with similar functionality, as doing so would diminish the intended learning value of the exercise.
+Key functions from the `clojure.core` namespace to avoid include `into`, `concat`, `cat`, `lazy-cat`, `mapcat`, `flatten`, `filter`, `filterv`, `remove`, `count`, `map`, `mapv`, `reduce`, `transduce`, `reverse`, and `rseq`.
+
+### Optional goals
+
+The optional goal is for those who want an extra challenge and is designed with the expectation that you've already completed the main goal.
+
+Try to pass the tests by devising an approach that assumes:
+
+* Both the input and output are lists instead of vectors.
+  Note that, as usual, the tests do not need to be modified.
+* Vectors cannot be used for intermediate steps.
+
+If you decide to publish this, be sure to include a comment indicating that it addresses the optional goal of using lists.
+Don't forget to update the docstrings!
diff --git a/exercises/practice/list-ops/.meta/config.json b/exercises/practice/list-ops/.meta/config.json
index 1035f4f..f1b2c91 100644
--- a/exercises/practice/list-ops/.meta/config.json
+++ b/exercises/practice/list-ops/.meta/config.json
@@ -1,10 +1,10 @@
 {
   "authors": [
-    "bobbicodes"
+    "bobbicodes",
+    "tasxatzial"
   ],
   "contributors": [
-    "kahgoh",
-    "tasxatzial"
+    "kahgoh"
   ],
   "files": {
     "solution": [
diff --git a/exercises/practice/list-ops/.meta/src/example.clj b/exercises/practice/list-ops/.meta/src/example.clj
index c4bc083..7aa1541 100644
--- a/exercises/practice/list-ops/.meta/src/example.clj
+++ b/exercises/practice/list-ops/.meta/src/example.clj
@@ -1,34 +1,50 @@
 (ns list-ops)
 
-(defn foldl [f coll init]
-  (loop [acc init l coll]
-    (cond
-      (empty? l) acc
-      :else (recur (f acc (first l)) (rest l)))))
-
-(defn append [coll1 coll2]
-  (list-ops/foldl (fn [acc elem] (conj acc elem)) coll2 coll1))
-
-(defn concatenate [coll]
-  (cond
-    (empty? coll) []
-    :else (list-ops/foldl (fn [acc elem] (list-ops/append acc elem)) (rest coll) (first coll))))
-
-(defn select-if [pred coll]
-  (loop [acc [] l coll]
-    (cond
-      (empty? l) acc
-      (pred (first l)) (recur (conj acc (first l)) (rest l))
-      :else (recur acc (rest l)))))
-
-(defn length [coll]
-  (list-ops/foldl (fn [acc elem] (+ acc 1)) coll 0))
-
-(defn apply-to-each [f coll]
-  (list-ops/foldl (fn [acc elem] (conj acc (f elem))) coll []))
-
-(defn reverse-order [coll]
-  (list-ops/foldl (fn [acc elem] (cons elem acc)) coll []))
-
-(defn foldr [f coll init]
-  (list-ops/foldl f (list-ops/reverse-order coll) init))
+(declare foldl)
+(declare reverse-order)
+
+(defn append
+  [coll1 coll2]
+  (foldl conj coll2 coll1))
+
+(defn concatenate
+  [colls]
+  (foldl append colls []))
+
+(defn select-if
+  [pred coll]
+  (let [reducer (fn [acc el]
+                  (if (pred el)
+                    (conj acc el)
+                    acc))]
+    (foldl reducer coll [])))
+
+(defn length
+  [coll]
+  (let [reducer (fn [acc _]
+                  (inc acc))]
+    (foldl reducer coll 0)))
+
+(defn apply-to-each
+  [f coll]
+  (let [reducer (fn [acc el]
+                  (conj acc (f el)))]
+    (foldl reducer coll [])))
+
+(defn foldl
+  [f coll acc]
+  (if (seq coll)
+    (recur f (rest coll) (f acc (first coll)))
+    acc))
+
+(defn foldr
+  [f coll acc]
+  (foldl f (reverse-order coll) acc))
+
+(defn reverse-order
+  [coll]
+  (loop [index (dec (length coll))
+         result []]
+    (if (neg? index)
+      result
+      (recur (dec index) (conj result (coll index))))))
diff --git a/exercises/practice/list-ops/.meta/src/example_lists.clj b/exercises/practice/list-ops/.meta/src/example_lists.clj
new file mode 100644
index 0000000..94b9c89
--- /dev/null
+++ b/exercises/practice/list-ops/.meta/src/example_lists.clj
@@ -0,0 +1,46 @@
+(ns list-ops)
+
+(declare foldl)
+(declare reverse-order)
+
+(defn append
+  [coll1 coll2]
+  (reverse-order (foldl conj coll2 (reverse-order coll1))))
+
+(defn concatenate
+  [colls]
+  (foldl append colls ()))
+
+(defn select-if
+  [pred coll]
+  (let [reducer (fn [acc el]
+                  (if (pred el)
+                    (conj acc el)
+                    acc))]
+    (reverse-order (foldl reducer coll ()))))
+
+(defn length
+  [coll]
+  (let [reducer (fn [acc _]
+                  (inc acc))]
+    (foldl reducer coll 0)))
+
+(defn apply-to-each
+  [f coll]
+  (let [reducer (fn [acc el]
+                  (conj acc (f el)))]
+    (reverse-order (foldl reducer coll ()))))
+
+(defn foldl
+  [f coll acc]
+  (if (seq coll)
+    (recur f (rest coll) (f acc (first coll)))
+    acc))
+
+(defn foldr
+  [f coll acc]
+  (foldl f (reverse-order coll) acc))
+
+(defn reverse-order
+  [coll]
+  (foldl conj coll ()))
diff --git a/exercises/practice/list-ops/src/list_ops.clj b/exercises/practice/list-ops/src/list_ops.clj
index 28d30ea..160992a 100644
--- a/exercises/practice/list-ops/src/list_ops.clj
+++ b/exercises/practice/list-ops/src/list_ops.clj
@@ -3,47 +3,47 @@
 (defn append 
   "Given two vectors, it adds all the items in the second vector to the end of the first vector"
   [coll1 coll2]
-  ;; your code goes here
-)
+  ;; function body
+  )
 
 (defn concatenate 
   "Given a vector of vectors, it combines all the vectors into one flattened vector"
   [colls]
-  ;; your code goes here
-)
+  ;; function body
+  )
 
 (defn select-if
   "Given a predicate and a vector, it returns the vector of all items for which predicate(item) is true"
   [pred coll]
-  ;; your code goes here
-)
+  ;; function body
+  )
 
 (defn length 
   "Given a vector, it returns the number of items within it"
   [coll]
-  ;; your code goes here
-)
+  ;; function body
+  )
 
 (defn apply-to-each 
   "Given a function and a vector, it returns the vector of the results of applying function(item) on all items"
   [f coll]
-  ;; your code goes here
-)
+  ;; function body
+  )
 
 (defn foldl 
   "Given a function, a vector, and initial accumulator, it folds (reduces) each item into the accumulator from the left"
-  [f coll init]
-  ;; your code goes here
-)
+  [f coll acc]
+  ;; function body
+  )
 
 (defn foldr
   "Given a function, a vector, and an initial accumulator, it folds (reduces) each item into the accumulator from the right"
-  [f coll init]
-  ;; your code goes here
-)
+  [f coll acc]
+  ;; function body
+  )
 
 (defn reverse-order 
   "Given a vector, it returns a vector with all the original items, but in reverse order"
   [coll]
-  ;; your code goes here
-)
+  ;; function body
+  )
diff --git a/exercises/practice/luhn/project.clj b/exercises/practice/luhn/project.clj
index c488e24..3eace5d 100644
--- a/exercises/practice/luhn/project.clj
+++ b/exercises/practice/luhn/project.clj
@@ -1,4 +1,4 @@
 (defproject luhn "0.1.0-SNAPSHOT"
   :description "luhn exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/luhn"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/luhn"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/matching-brackets/project.clj b/exercises/practice/matching-brackets/project.clj
index eb8d2ce..e94448a 100644
--- a/exercises/practice/matching-brackets/project.clj
+++ b/exercises/practice/matching-brackets/project.clj
@@ -1,4 +1,4 @@
 (defproject matching-brackets "0.1.0-SNAPSHOT"
   :description "matching-brackets exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/matching-brackets"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/matching-brackets"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/meetup/project.clj b/exercises/practice/meetup/project.clj
index 9f59222..da77434 100644
--- a/exercises/practice/meetup/project.clj
+++ b/exercises/practice/meetup/project.clj
@@ -1,4 +1,4 @@
 (defproject meetup "0.1.0-SNAPSHOT"
   :description "meetup exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/meetup"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/meetup"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/minesweeper/project.clj b/exercises/practice/minesweeper/project.clj
index 57beb32..7a89ce2 100644
--- a/exercises/practice/minesweeper/project.clj
+++ b/exercises/practice/minesweeper/project.clj
@@ -1,4 +1,4 @@
 (defproject minesweeper "0.1.0-SNAPSHOT"
   :description "minesweeper exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/minesweeper"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/minesweeper"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/nth-prime/project.clj b/exercises/practice/nth-prime/project.clj
index 4c1c417..6cee86d 100644
--- a/exercises/practice/nth-prime/project.clj
+++ b/exercises/practice/nth-prime/project.clj
@@ -1,4 +1,4 @@
 (defproject nth-prime "0.1.0-SNAPSHOT"
   :description "nth-prime exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/nth-prime"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/nth-prime"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/nucleotide-count/project.clj b/exercises/practice/nucleotide-count/project.clj
index a8c0081..813cc6d 100644
--- a/exercises/practice/nucleotide-count/project.clj
+++ b/exercises/practice/nucleotide-count/project.clj
@@ -1,4 +1,4 @@
 (defproject nucleotide-count "0.1.0-SNAPSHOT"
   :description "nucleotide-count exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/nucleotide-count"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/nucleotide-count"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/octal/project.clj b/exercises/practice/octal/project.clj
index f6d9130..6741c04 100644
--- a/exercises/practice/octal/project.clj
+++ b/exercises/practice/octal/project.clj
@@ -1,4 +1,4 @@
 (defproject octal "0.1.0-SNAPSHOT"
   :description "octal exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/octal"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/octal"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/pascals-triangle/project.clj b/exercises/practice/pascals-triangle/project.clj
index 7e98405..41e2e1f 100644
--- a/exercises/practice/pascals-triangle/project.clj
+++ b/exercises/practice/pascals-triangle/project.clj
@@ -1,4 +1,4 @@
 (defproject pascals-triangle "0.1.0-SNAPSHOT"
   :description "pascal's triangle exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/pascals-triangle"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/pascals-triangle"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/perfect-numbers/project.clj b/exercises/practice/perfect-numbers/project.clj
index a6a4236..b3253de 100644
--- a/exercises/practice/perfect-numbers/project.clj
+++ b/exercises/practice/perfect-numbers/project.clj
@@ -1,4 +1,4 @@
 (defproject perfect-numbers "0.1.0-SNAPSHOT"
   :description "perfect-numbers exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/perfect-numbers"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/perfect-numbers"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/phone-number/project.clj b/exercises/practice/phone-number/project.clj
index 0341afc..540b3a4 100644
--- a/exercises/practice/phone-number/project.clj
+++ b/exercises/practice/phone-number/project.clj
@@ -1,4 +1,4 @@
 (defproject phone-number "0.1.0-SNAPSHOT"
   :description "phone-number exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/phone-number"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/phone-number"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/pig-latin/project.clj b/exercises/practice/pig-latin/project.clj
index d32c085..3580d4d 100644
--- a/exercises/practice/pig-latin/project.clj
+++ b/exercises/practice/pig-latin/project.clj
@@ -1,4 +1,4 @@
 (defproject pig-latin "0.1.0-SNAPSHOT"
   :description "pig latin exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/pig-latin"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/pig-latin"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/poker/project.clj b/exercises/practice/poker/project.clj
index 1269346..aad92d7 100644
--- a/exercises/practice/poker/project.clj
+++ b/exercises/practice/poker/project.clj
@@ -1,4 +1,4 @@
 (defproject poker "0.1.0-SNAPSHOT"
   :description "poker exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/poker"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/poker"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/prime-factors/project.clj b/exercises/practice/prime-factors/project.clj
index 0347d5b..39e7a07 100644
--- a/exercises/practice/prime-factors/project.clj
+++ b/exercises/practice/prime-factors/project.clj
@@ -1,4 +1,4 @@
 (defproject prime-factors "0.1.0-SNAPSHOT"
   :description "prime-factors exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/prime-factors"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/prime-factors"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/queen-attack/project.clj b/exercises/practice/queen-attack/project.clj
index beeb80d..7d657dd 100644
--- a/exercises/practice/queen-attack/project.clj
+++ b/exercises/practice/queen-attack/project.clj
@@ -1,4 +1,4 @@
 (defproject queen-attack "0.1.0-SNAPSHOT"
   :description "queen-attack exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/queen-attack"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/queen-attack"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/raindrops/project.clj b/exercises/practice/raindrops/project.clj
index 65b35f1..0835003 100644
--- a/exercises/practice/raindrops/project.clj
+++ b/exercises/practice/raindrops/project.clj
@@ -1,4 +1,4 @@
 (defproject raindrops "0.1.0-SNAPSHOT"
   :description "raindrops exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/raindrops"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/raindrops"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/reverse-string/project.clj b/exercises/practice/reverse-string/project.clj
index 34c22bc..aeb77e2 100644
--- a/exercises/practice/reverse-string/project.clj
+++ b/exercises/practice/reverse-string/project.clj
@@ -1,4 +1,4 @@
 (defproject reverse-string "0.1.0-SNAPSHOT"
   :description "reverse-string exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/reverse-string"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/reverse-string"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/rna-transcription/project.clj b/exercises/practice/rna-transcription/project.clj
index 7e075e5..001e6fa 100644
--- a/exercises/practice/rna-transcription/project.clj
+++ b/exercises/practice/rna-transcription/project.clj
@@ -1,4 +1,4 @@
 (defproject rna-transcription "0.1.0-SNAPSHOT"
   :description "rna-transcription exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/rna-transcription"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/rna-transcription"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/robot-name/project.clj b/exercises/practice/robot-name/project.clj
index 4520f75..f25a222 100644
--- a/exercises/practice/robot-name/project.clj
+++ b/exercises/practice/robot-name/project.clj
@@ -1,4 +1,4 @@
 (defproject robot-name "0.1.0-SNAPSHOT"
   :description "robot-name exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/robot-name"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/robot-name"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/robot-simulator/project.clj b/exercises/practice/robot-simulator/project.clj
index 13c24e3..896df5d 100644
--- a/exercises/practice/robot-simulator/project.clj
+++ b/exercises/practice/robot-simulator/project.clj
@@ -1,4 +1,4 @@
 (defproject robot-simulator "0.1.0-SNAPSHOT"
   :description "robot-simulator exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/robot-simulator"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/robot-simulator"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/roman-numerals/project.clj b/exercises/practice/roman-numerals/project.clj
index 98fef1e..30a2da0 100644
--- a/exercises/practice/roman-numerals/project.clj
+++ b/exercises/practice/roman-numerals/project.clj
@@ -1,4 +1,4 @@
 (defproject roman-numerals "0.1.0-SNAPSHOT"
   :description "roman-numerals exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/roman-numerals"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/roman-numerals"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/rotational-cipher/project.clj b/exercises/practice/rotational-cipher/project.clj
index 829ad91..8d355ba 100644
--- a/exercises/practice/rotational-cipher/project.clj
+++ b/exercises/practice/rotational-cipher/project.clj
@@ -1,4 +1,4 @@
 (defproject rotational-cipher "0.1.0-SNAPSHOT"
   :description "rotational cipher exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/rotational-cipher"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/rotational-cipher"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/run-length-encoding/project.clj b/exercises/practice/run-length-encoding/project.clj
index 42ce313..00d4b8a 100644
--- a/exercises/practice/run-length-encoding/project.clj
+++ b/exercises/practice/run-length-encoding/project.clj
@@ -1,4 +1,4 @@
 (defproject run-length-encoding "0.1.0-SNAPSHOT"
   :description "run-length-encoding exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/run-length-encoding"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/run-length-encoding"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/say/project.clj b/exercises/practice/say/project.clj
index c4f6fa5..d89c2a6 100644
--- a/exercises/practice/say/project.clj
+++ b/exercises/practice/say/project.clj
@@ -1,4 +1,4 @@
 (defproject say "0.1.0-SNAPSHOT"
   :description "say exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/say"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/say"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/scrabble-score/project.clj b/exercises/practice/scrabble-score/project.clj
index 67f5966..dd6a600 100644
--- a/exercises/practice/scrabble-score/project.clj
+++ b/exercises/practice/scrabble-score/project.clj
@@ -1,4 +1,4 @@
 (defproject scrabble-score "0.1.0-SNAPSHOT"
   :description "scrabble-score exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/scrabble-score"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/scrabble-score"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/secret-handshake/project.clj b/exercises/practice/secret-handshake/project.clj
index 17699a4..3fb64c7 100644
--- a/exercises/practice/secret-handshake/project.clj
+++ b/exercises/practice/secret-handshake/project.clj
@@ -1,4 +1,4 @@
 (defproject secret-handshake "0.1.0-SNAPSHOT"
   :description "secret-handshake exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/secret-handshake"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/secret-handshake"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/series/project.clj b/exercises/practice/series/project.clj
index f7932e4..948600f 100644
--- a/exercises/practice/series/project.clj
+++ b/exercises/practice/series/project.clj
@@ -1,4 +1,4 @@
 (defproject series "0.1.0-SNAPSHOT"
   :description "series exercise"
-  :url "https://github.com/exercism/clojure/tree/master/exercises/series"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/series"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/sieve/project.clj b/exercises/practice/sieve/project.clj
index eef826f..e61b002 100644
--- a/exercises/practice/sieve/project.clj
+++ b/exercises/practice/sieve/project.clj
@@ -1,4 +1,4 @@
 (defproject sieve "0.1.0-SNAPSHOT"
   :description "sieve exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/sieve"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/sieve"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/space-age/project.clj b/exercises/practice/space-age/project.clj
index 358ebae..1fd8c72 100644
--- a/exercises/practice/space-age/project.clj
+++ b/exercises/practice/space-age/project.clj
@@ -1,4 +1,4 @@
 (defproject space-age "0.1.0-SNAPSHOT"
   :description "space-age exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/space-age"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/space-age"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/spiral-matrix/.meta/config.json b/exercises/practice/spiral-matrix/.meta/config.json
index 2780de6..a8a87e2 100644
--- a/exercises/practice/spiral-matrix/.meta/config.json
+++ b/exercises/practice/spiral-matrix/.meta/config.json
@@ -3,7 +3,8 @@
   "contributors": [
     "AndreaCrotti",
     "haus",
-    "sjwarner-bp"
+    "sjwarner-bp",
+    "tasxatzial"
   ],
   "files": {
     "solution": [
diff --git a/exercises/practice/spiral-matrix/project.clj b/exercises/practice/spiral-matrix/project.clj
index 8efe74c..eb2bec6 100644
--- a/exercises/practice/spiral-matrix/project.clj
+++ b/exercises/practice/spiral-matrix/project.clj
@@ -1,4 +1,4 @@
 (defproject spiral-matrix "0.1.0-SNAPSHOT"
   :description "spiral-matrix exercise"
-  :url "https://github.com/exercism/clojure/tree/master/exercises/spiral-matrix"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/spiral-matrix"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/spiral-matrix/src/spiral_matrix.clj b/exercises/practice/spiral-matrix/src/spiral_matrix.clj
index 0020962..cd4ad00 100644
--- a/exercises/practice/spiral-matrix/src/spiral_matrix.clj
+++ b/exercises/practice/spiral-matrix/src/spiral_matrix.clj
@@ -1,5 +1,7 @@
 (ns spiral-matrix)
 
-(defn spiral [n] ;; <- arglist goes here
-  ;; your code goes here
-)
+(defn spiral
+  "Returns a spiral matrix of size n x n"
+  [n]
+  ;; function body
+  )
diff --git a/exercises/practice/strain/project.clj b/exercises/practice/strain/project.clj
index 3eced97..8a6b151 100644
--- a/exercises/practice/strain/project.clj
+++ b/exercises/practice/strain/project.clj
@@ -1,4 +1,4 @@
 (defproject strain "0.1.0-SNAPSHOT"
   :description "strain exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/strain"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/strain"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/sublist/.docs/instructions.append.md b/exercises/practice/sublist/.docs/instructions.append.md
new file mode 100644
index 0000000..fd70d1c
--- /dev/null
+++ b/exercises/practice/sublist/.docs/instructions.append.md
@@ -0,0 +1,11 @@
+# Instructions append
+
+## Appendix
+
+~~~~exercism/note
+The instructions above are synchronized with a shared repository to ensure consistency across all language tracks.
+This appendix provides additional clarification or modifies the instructions as needed to better align with the goals of the Clojure track.
+~~~~
+
+For this exercise in the Clojure track, you may **assume the input is a vector**, as indicated by the tests.
+However, this is not a strict requirement.
diff --git a/exercises/practice/sublist/.docs/instructions.md b/exercises/practice/sublist/.docs/instructions.md
index 7535931..8228edc 100644
--- a/exercises/practice/sublist/.docs/instructions.md
+++ b/exercises/practice/sublist/.docs/instructions.md
@@ -8,8 +8,8 @@ Given any two lists `A` and `B`, determine if:
 - None of the above is true, thus lists `A` and `B` are unequal
 
 Specifically, list `A` is equal to list `B` if both lists have the same values in the same order.
-List `A` is a superlist of `B` if `A` contains a sub-sequence of values equal to `B`.
-List `A` is a sublist of `B` if `B` contains a sub-sequence of values equal to `A`.
+List `A` is a superlist of `B` if `A` contains a contiguous sub-sequence of values equal to `B`.
+List `A` is a sublist of `B` if `B` contains a contiguous sub-sequence of values equal to `A`.
 
 Examples:
 
diff --git a/exercises/practice/sublist/.meta/config.json b/exercises/practice/sublist/.meta/config.json
index 73198e2..9d58c09 100644
--- a/exercises/practice/sublist/.meta/config.json
+++ b/exercises/practice/sublist/.meta/config.json
@@ -5,7 +5,8 @@
   "contributors": [
     "AndreaCrotti",
     "haus",
-    "yurrriq"
+    "yurrriq",
+    "tasxatzial"
   ],
   "files": {
     "solution": [
diff --git a/exercises/practice/sublist/project.clj b/exercises/practice/sublist/project.clj
index 723c170..6b3c691 100644
--- a/exercises/practice/sublist/project.clj
+++ b/exercises/practice/sublist/project.clj
@@ -1,4 +1,4 @@
 (defproject sublist "0.1.0-SNAPSHOT"
   :description "sublist exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/sublist"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/sublist"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/sublist/src/sublist.clj b/exercises/practice/sublist/src/sublist.clj
index d6b8844..4974292 100644
--- a/exercises/practice/sublist/src/sublist.clj
+++ b/exercises/practice/sublist/src/sublist.clj
@@ -1,5 +1,6 @@
 (ns sublist)
 
-(defn classify [list1 list2] ;; <- arglist goes here
-      ;; your code goes here
-)
+(defn classify
+  [coll1 coll2]
+  ;; function body
+  )
diff --git a/exercises/practice/sum-of-multiples/project.clj b/exercises/practice/sum-of-multiples/project.clj
index 0fc5a89..f5c6862 100644
--- a/exercises/practice/sum-of-multiples/project.clj
+++ b/exercises/practice/sum-of-multiples/project.clj
@@ -1,4 +1,4 @@
 (defproject sum-of-multiples "0.1.0-SNAPSHOT"
   :description "sum-of-multiples exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/sum-of-multiples"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/sum-of-multiples"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/triangle/project.clj b/exercises/practice/triangle/project.clj
index 89fd6e6..487dff7 100644
--- a/exercises/practice/triangle/project.clj
+++ b/exercises/practice/triangle/project.clj
@@ -1,4 +1,4 @@
 (defproject triangle "0.1.0-SNAPSHOT"
   :description "triangle exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/triangle"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/triangle"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/trinary/project.clj b/exercises/practice/trinary/project.clj
index 6955d96..82c86e8 100644
--- a/exercises/practice/trinary/project.clj
+++ b/exercises/practice/trinary/project.clj
@@ -1,4 +1,4 @@
 (defproject trinary "0.1.0-SNAPSHOT"
   :description "trinary exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/trinary"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/trinary"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/two-fer/project.clj b/exercises/practice/two-fer/project.clj
index 6c67fbd..ef70e9e 100644
--- a/exercises/practice/two-fer/project.clj
+++ b/exercises/practice/two-fer/project.clj
@@ -1,4 +1,4 @@
 (defproject two-fer "0.1.0-SNAPSHOT"
   :description "two-fer exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/two-fer"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/two-fer"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/word-count/project.clj b/exercises/practice/word-count/project.clj
index 464bbd5..21e31d4 100644
--- a/exercises/practice/word-count/project.clj
+++ b/exercises/practice/word-count/project.clj
@@ -1,4 +1,4 @@
 (defproject word-count "0.1.0-SNAPSHOT"
   :description "word-count exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/word-count"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/word-count"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/wordy/project.clj b/exercises/practice/wordy/project.clj
index b09f3e0..f1bd8bf 100644
--- a/exercises/practice/wordy/project.clj
+++ b/exercises/practice/wordy/project.clj
@@ -1,4 +1,4 @@
 (defproject word-count "0.1.0-SNAPSHOT"
   :description "wordy exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/wordy"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/wordy"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/yacht/.meta/config.json b/exercises/practice/yacht/.meta/config.json
index 594bae5..c6ff390 100644
--- a/exercises/practice/yacht/.meta/config.json
+++ b/exercises/practice/yacht/.meta/config.json
@@ -2,7 +2,6 @@
   "authors": [
     "porkostomus"
   ],
-  "contributors": [],
   "files": {
     "solution": [
       "src/yacht.clj"
diff --git a/exercises/practice/yacht/project.clj b/exercises/practice/yacht/project.clj
index 12fc797..f7cb817 100644
--- a/exercises/practice/yacht/project.clj
+++ b/exercises/practice/yacht/project.clj
@@ -1,4 +1,4 @@
 (defproject yacht "0.1.0-SNAPSHOT"
   :description "yacht exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/yacht"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/yacht"
   :dependencies [[org.clojure/clojure "1.10.0"]])
diff --git a/exercises/practice/zipper/.meta/config.json b/exercises/practice/zipper/.meta/config.json
index 7a564d0..9a534de 100644
--- a/exercises/practice/zipper/.meta/config.json
+++ b/exercises/practice/zipper/.meta/config.json
@@ -1,10 +1,17 @@
 {
-  "authors" : [ "porkostomus" ],
-  "contributors" : [ ],
-  "files" : {
-    "solution" : [ "src/zipper.clj" ],
-    "test" : [ "test/zipper_test.clj" ],
-    "example" : [ ".meta/src/example.clj" ]
+  "authors": [
+    "porkostomus"
+  ],
+  "files": {
+    "solution": [
+      "src/zipper.clj"
+    ],
+    "test": [
+      "test/zipper_test.clj"
+    ],
+    "example": [
+      ".meta/src/example.clj"
+    ]
   },
-  "blurb" : "Creating a zipper for a binary tree."
-}
\ No newline at end of file
+  "blurb": "Creating a zipper for a binary tree."
+}
diff --git a/exercises/practice/zipper/project.clj b/exercises/practice/zipper/project.clj
index eb902cc..d44e5b2 100644
--- a/exercises/practice/zipper/project.clj
+++ b/exercises/practice/zipper/project.clj
@@ -1,4 +1,4 @@
 (defproject zipper "0.1.0-SNAPSHOT"
   :description "zipper exercise."
-  :url "https://github.com/exercism/clojure/tree/master/exercises/zipper"
+  :url "https://github.com/exercism/clojure/tree/main/exercises/practice/zipper"
   :dependencies [[org.clojure/clojure "1.10.0"]])


Test patch:
diff --git a/exercises/practice/armstrong-numbers/.meta/tests.toml b/exercises/practice/armstrong-numbers/.meta/tests.toml
index b956bdf..b3f09e4 100644
--- a/exercises/practice/armstrong-numbers/.meta/tests.toml
+++ b/exercises/practice/armstrong-numbers/.meta/tests.toml
@@ -38,8 +38,6 @@ description = "Seven-digit number that is not an Armstrong number"
 
 [5ee2fdf8-334e-4a46-bb8d-e5c19c02c148]
 description = "Armstrong number containing seven zeroes"
-include = false
 
 [12ffbf10-307a-434e-b4ad-c925680e1dd4]
 description = "The largest and last Armstrong number"
-include = false
diff --git a/exercises/practice/armstrong-numbers/test/armstrong_numbers_test.clj b/exercises/practice/armstrong-numbers/test/armstrong_numbers_test.clj
index 3404cf9..a2c9966 100644
--- a/exercises/practice/armstrong-numbers/test/armstrong_numbers_test.clj
+++ b/exercises/practice/armstrong-numbers/test/armstrong_numbers_test.clj
@@ -1,39 +1,47 @@
 (ns armstrong-numbers-test
   (:require [clojure.test :refer [deftest is testing]]
-            [armstrong-numbers :refer [armstrong?]]))
+            armstrong-numbers))
 
-(deftest armstrong-number-0
+(deftest test-c1ed103c-258d-45b2-be73-d8c6d9580c7b
   (testing "Zero is an Armstrong number"
-    (is (armstrong? 0))))
+    (is (true? (armstrong-numbers/armstrong? 0)))))
 
-(deftest armstrong-number-5
+(deftest test-579e8f03-9659-4b85-a1a2-d64350f6b17a
   (testing "Single-digit numbers are Armstrong numbers"
-    (is (armstrong? 5))))
+    (is (true? (armstrong-numbers/armstrong? 5)))))
 
-(deftest not-armstrong-number-10
+(deftest test-2d6db9dc-5bf8-4976-a90b-b2c2b9feba60
   (testing "There are no two-digit Armstrong numbers"
-    (is (not (armstrong? 10)))))
+    (is (false? (armstrong-numbers/armstrong? 10)))))
 
-(deftest armstrong-number-153
+(deftest test-509c087f-e327-4113-a7d2-26a4e9d18283
   (testing "Three-digit number that is an Armstrong number"
-    (is (armstrong? 153))))
+    (is (true? (armstrong-numbers/armstrong? 153)))))
 
-(deftest not-armstrong-number-100
+(deftest test-7154547d-c2ce-468d-b214-4cb953b870cf
   (testing "Three-digit number that is not an Armstrong number"
-    (is (not (armstrong? 100)))))
+    (is (false? (armstrong-numbers/armstrong? 100)))))
 
-(deftest armstrong-number-9474
+(deftest test-6bac5b7b-42e9-4ecb-a8b0-4832229aa103
   (testing "Four-digit number that is an Armstrong number"
-    (is (armstrong? 9474))))
+    (is (true? (armstrong-numbers/armstrong? 9474)))))
 
-(deftest not-armstrong-number-9475
+(deftest test-eed4b331-af80-45b5-a80b-19c9ea444b2e
   (testing "Four-digit number that is not an Armstrong number"
-    (is (not (armstrong? 9475)))))
+    (is (false? (armstrong-numbers/armstrong? 9475)))))
 
-(deftest armstrong-number-9926315
+(deftest test-f971ced7-8d68-4758-aea1-d4194900b864
   (testing "Seven-digit number that is an Armstrong number"
-    (is (armstrong? 9926315))))
+    (is (true? (armstrong-numbers/armstrong? 9926315)))))
 
-(deftest not-armstrong-number-9926314
+(deftest test-7ee45d52-5d35-4fbd-b6f1-5c8cd8a67f18
   (testing "Seven-digit number that is not an Armstrong number"
-    (is (not (armstrong? 9926314)))))
+    (is (false? (armstrong-numbers/armstrong? 9926314)))))
+
+(deftest test-5ee2fdf8-334e-4a46-bb8d-e5c19c02c148
+  (testing "Armstrong number containing seven zeroes"
+    (is (true? (armstrong-numbers/armstrong? 186709961001538790100634132976990)))))
+
+(deftest test-12ffbf10-307a-434e-b4ad-c925680e1dd4
+  (testing "The largest and last Armstrong number"
+    (is (true? (armstrong-numbers/armstrong? 115132219018763992565095597973971522401)))))
diff --git a/exercises/practice/dominoes/.meta/tests.toml b/exercises/practice/dominoes/.meta/tests.toml
index 23ff84f..08c8e08 100644
--- a/exercises/practice/dominoes/.meta/tests.toml
+++ b/exercises/practice/dominoes/.meta/tests.toml
@@ -1,6 +1,13 @@
-# This is an auto-generated file. Regular comments will be removed when this
-# file is regenerated. Regenerating will not touch any manually added keys,
-# so comments can be added in a "comment" key.
+# 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"
@@ -37,3 +44,6 @@ 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/test/dominoes_test.clj b/exercises/practice/dominoes/test/dominoes_test.clj
index bb1b2ef..beccaa3 100644
--- a/exercises/practice/dominoes/test/dominoes_test.clj
+++ b/exercises/practice/dominoes/test/dominoes_test.clj
@@ -1,39 +1,55 @@
 (ns dominoes-test
-  (:require [clojure.test :refer [deftest is]]
-            [dominoes     :refer [can-chain?]]))
+  (:require [clojure.test :refer [deftest testing is]]
+            dominoes))
 
-(deftest empty-input-empty-output
-  (is (can-chain? [])))
+(deftest test-31a673f2-5e54-49fe-bd79-1c1dae476c9c
+  (testing "Empty input = empty output"
+    (is (true? (dominoes/can-chain? [])))))
 
-(deftest singleton-input-singleton-output
-  (is (can-chain? [[1 1]])))
+(deftest test-4f99b933-367b-404b-8c6d-36d5923ee476
+  (testing "Singleton input = singleton output"
+    (is (true? (dominoes/can-chain? [[1 1]])))))
 
-(deftest singleton-that-cant-be-chained
-  (is ((comp not can-chain?) [[1 2]])))
+(deftest test-91122d10-5ec7-47cb-b759-033756375869
+  (testing "Singleton that can't be chained"
+    (is (false? (dominoes/can-chain? [[1 2]])))))
 
-(deftest three-elements
-  (is (can-chain?  [[1 2] [3 1] [2 3]])))
+(deftest test-be8bc26b-fd3d-440b-8e9f-d698a0623be3
+  (testing "Three elements"
+    (is (true? (dominoes/can-chain?  [[1 2] [3 1] [2 3]])))))
 
-(deftest can-reverse-dominoes
-  (is (can-chain? [[1 2] [1 3] [2 3]])))
+(deftest test-99e615c6-c059-401c-9e87-ad7af11fea5c
+  (testing "Can reverse dominoes"
+    (is (true? (dominoes/can-chain? [[1 2] [1 3] [2 3]])))))
 
-(deftest cant-be-chained
-  (is ((comp not can-chain?) [[1 2] [4 1] [2 3]])))
+(deftest test-51f0c291-5d43-40c5-b316-0429069528c9
+  (testing "Can't be chained"
+    (is (false? (dominoes/can-chain? [[1 2] [4 1] [2 3]])))))
 
-(deftest disconnected-simple
-  (is ((comp not can-chain?) [[1 1] [2 2]])))
+(deftest test-9a75e078-a025-4c23-8c3a-238553657f39
+  (testing "Disconnected - simple"
+    (is (false? (dominoes/can-chain? [[1 1] [2 2]])))))
 
-(deftest disconnected-double-loop
-  (is ((comp not can-chain?) [[1 2] [2 1] [3 4] [4 3]])))
+(deftest test-0da0c7fe-d492-445d-b9ef-1f111f07a301
+  (testing "Disconnected - double loop"
+    (is (false? (dominoes/can-chain? [[1 2] [2 1] [3 4] [4 3]])))))
 
-(deftest disconnected-single-isolated
-  (is ((comp not can-chain?) [[1 2] [2 3] [3 1] [4 4]])))
+(deftest test-b6087ff0-f555-4ea0-a71c-f9d707c5994a
+  (testing "Disconnected - single isolated"
+    (is (false? (dominoes/can-chain? [[1 2] [2 3] [3 1] [4 4]])))))
 
-(deftest need-backtrack
-  (is (can-chain? [[1 2] [2 3] [3 1] [2 4] [2 4]])))
+(deftest test-2174fbdc-8b48-4bac-9914-8090d06ef978
+  (testing "Need backtrack"
+    (is (true? (dominoes/can-chain? [[1 2] [2 3] [3 1] [2 4] [2 4]])))))
 
-(deftest separate-loops
-  (is (can-chain? [[1 2] [2 3] [3 1] [1 1] [2 2] [3 3]])))
+(deftest test-167bb480-dfd1-4318-a20d-4f90adb4a09f
+  (testing "Separate loops"
+    (is (true? (dominoes/can-chain? [[1 2] [2 3] [3 1] [1 1] [2 2] [3 3]])))))
 
-(deftest nine-elements
-  (is (can-chain? [[1 2] [5 3] [3 1] [1 2] [2 4] [1 6] [2 3] [3 4] [5 6]])))
+(deftest test-cd061538-6046-45a7-ace9-6708fe8f6504
+  (testing "Nine elements"
+    (is (true? (dominoes/can-chain? [[1 2] [5 3] [3 1] [1 2] [2 4] [1 6] [2 3] [3 4] [5 6]])))))
+
+(deftest test-44704c7c-3adb-4d98-bd30-f45527cf8b49
+  (testing "Separate three-domino loops"
+    (is (false? (dominoes/can-chain?  [[1 2] [2 3] [3 1] [4 5] [5 6] [6 4]])))))
diff --git a/exercises/practice/list-ops/test/list_ops_test.clj b/exercises/practice/list-ops/test/list_ops_test.clj
index 2b26907..83f0544 100644
--- a/exercises/practice/list-ops/test/list_ops_test.clj
+++ b/exercises/practice/list-ops/test/list_ops_test.clj
@@ -2,62 +2,90 @@
   (:require [clojure.test :refer [deftest testing is]]
              list-ops))
 
-(deftest append-test
-  (testing "empty vectors"
-     (is (= [] (list-ops/append [] []))))
-  (testing "vector to empty vector"
-     (is (= [1 2 3 4] (list-ops/append [] [1 2 3 4]))))
-  (testing "empty vector to vector"
-     (is (= [1 2 3 4] (list-ops/append [1 2 3 4] []))))
-  (testing "non-empty vectors"
-     (is (= [1 2 2 3 4 5] (list-ops/append [1 2] [2 3 4 5])))))
-
-(deftest concatenate-test
-  (testing "empty vector"
-     (is (= [] (list-ops/concatenate []))))
-  (testing "vector of vectors"
-     (is (= [1 2 3 4 5 6] (list-ops/concatenate [[1 2] [3] [] [4 5 6]]))))
-  (testing "vector of nested vectors"
-     (is (= [[1] [2] [3] [] [4 5 6]] (list-ops/concatenate [[[1] [2]] [[3]] [[]] [[4 5 6]]])))))
-
-(deftest select-if-test
-  (testing "empty vector"
-     (is (= [] (list-ops/select-if (fn [x] (= (mod x 2) 1)) [])))
-  (testing "non-empty vector"
-     (is (= [1 3 5] (list-ops/select-if (fn [x] (= (mod x 2) 1)) [1 2 3 5]))))))
-
-(deftest length-test
-  (testing "empty vector"
-     (is (= 0 (list-ops/length []))))
-  (testing "non-empty vector"
-     (is (= 4 (list-ops/length [1 2 3 4])))))
-
-(deftest apply-to-each-test
-  (testing "empty vector"
-     (is (= [] (list-ops/apply-to-each (fn [x] (+ x 1)) []))))
-  (testing "non-empty vector"
-     (is (= [2 4 6 8] (list-ops/apply-to-each (fn [x] (+ x 1)) [1 3 5 7])))))
-
-(deftest foldl-test
-  (testing "empty vector"
-     (is (= 2 (list-ops/foldl (fn [acc el] (* el acc)) [] 2))))
-  (testing "direction independent function applied to non-empty vector"
-     (is (= 15 (list-ops/foldl (fn [acc el] (+ el acc)) [1 2 3 4] 5))))
-  (testing "direction dependent function applied to non-empty vector"
-     (is (= 64 (list-ops/foldl (fn [acc el] (/ el acc)) [1 2 3 4] 24)))))
-
-(deftest foldr-test
-  (testing "empty vector"
-     (is (= 2 (list-ops/foldr (fn [acc el] (* el acc)) [] 2))))
-  (testing "direction independent function applied to non-empty vector"
-     (is (= 15 (list-ops/foldr (fn [acc el] (+ el acc)) [1 2 3 4] 5))))
-  (testing "direction dependent function applied to non-empty vector"
-     (is (= 9 (list-ops/foldr (fn [acc el] (/ el acc)) [1 2 3 4] 24)))))
-
-(deftest reverse-order-test
-  (testing "empty vector"
-     (is (= [] (list-ops/reverse-order []))))
-  (testing "non-empty vector"
-     (is (= [7 5 3 1] (list-ops/reverse-order [1 3 5 7]))))
-  (testing "vector of vectors is not flattened"
-     (is (= [[4 5 6] [] [3] [1 2]] (list-ops/reverse-order [[1 2] [3] [] [4 5 6]])))))
+(deftest test-485b9452-bf94-40f7-a3db-c3cf4850066a
+  (testing "append entries to a vector and return the new vector -> empty vectors"
+    (is (= [] (list-ops/append [] [])))))
+
+(deftest test-2c894696-b609-4569-b149-8672134d340a
+  (testing "append entries to a vector and return the new vector -> vector to empty vector"
+    (is (= [1 2 3 4] (list-ops/append [] [1 2 3 4])))))
+
+(deftest test-e842efed-3bf6-4295-b371-4d67a4fdf19c
+  (testing "append entries to a vector and return the new vector -> empty vector to vector"
+    (is (= [1 2 3 4] (list-ops/append [1 2 3 4] [])))))
+
+(deftest test-71dcf5eb-73ae-4a0e-b744-a52ee387922f
+  (testing "append entries to a vector and return the new vector -> non-empty vectors"
+    (is (= [1 2 2 3 4 5] (list-ops/append [1 2] [2 3 4 5])))))
+
+(deftest test-28444355-201b-4af2-a2f6-5550227bde21
+  (testing "concatenate a vector of vectors -> empty vector"
+    (is (= [] (list-ops/concatenate [])))))
+
+(deftest test-331451c1-9573-42a1-9869-2d06e3b389a9
+  (testing "concatenate a vector of vectors -> vector of vectors"
+    (is (= [1 2 3 4 5 6] (list-ops/concatenate [[1 2] [3] [] [4 5 6]])))))
+
+(deftest test-d6ecd72c-197f-40c3-89a4-aa1f45827e09
+  (testing "concatenate a vector of vectors -> vector of nested vectors"
+    (is (= [[1] [2] [3] [] [4 5 6]] (list-ops/concatenate [[[1] [2]] [[3]] [[]] [[4 5 6]]])))))
+
+(deftest test-0524fba8-3e0f-4531-ad2b-f7a43da86a16
+  (testing "filter vector returning only values that satisfy the filter function -> empty vector"
+    (is (= [] (list-ops/select-if (fn [x] (= (mod x 2) 1)) [])))))
+
+(deftest test-88494bd5-f520-4edb-8631-88e415b62d24
+  (testing "filter vector returning only values that satisfy the filter function -> non-empty vector"
+    (is (= [1 3 5] (list-ops/select-if (fn [x] (= (mod x 2) 1)) [1 2 3 5])))))
+
+(deftest test-1cf0b92d-8d96-41d5-9c21-7b3c37cb6aad
+  (testing "returns the length of a vector -> empty vector"
+    (is (= 0 (list-ops/length [])))))
+
+(deftest test-d7b8d2d9-2d16-44c4-9a19-6e5f237cb71e
+  (testing "returns the length of a vector -> non-empty vector"
+    (is (= 4 (list-ops/length [1 2 3 4])))))
+
+(deftest test-c0bc8962-30e2-4bec-9ae4-668b8ecd75aa
+  (testing "return a vector of elements whose values equal the vector value transformed by the mapping function -> empty vector"
+    (is (= [] (list-ops/apply-to-each (fn [x] (+ x 1)) [])))))
+
+(deftest test-11e71a95-e78b-4909-b8e4-60cdcaec0e91
+  (testing "return a vector of elements whose values equal the vector value transformed by the mapping function -> non-empty vector"
+    (is (= [2 4 6 8] (list-ops/apply-to-each (fn [x] (+ x 1)) [1 3 5 7])))))
+
+(deftest test-36549237-f765-4a4c-bfd9-5d3a8f7b07d2
+  (testing "folds (reduces) the given vector from the left with a function -> empty vector"
+    (is (= 2 (list-ops/foldl (fn [acc el] (* el acc)) [] 2)))))
+
+(deftest test-7a626a3c-03ec-42bc-9840-53f280e13067
+  (testing "folds (reduces) the given vector from the left with a function -> direction independent function applied to non-empty vector"
+    (is (= 15 (list-ops/foldl (fn [acc el] (+ el acc)) [1 2 3 4] 5)))))
+
+(deftest test-d7fcad99-e88e-40e1-a539-4c519681f390
+  (testing "folds (reduces) the given vector from the left with a function -> direction dependent function applied to non-empty vector"
+    (is (= 64 (list-ops/foldl (fn [acc el] (/ el acc)) [1 2 3 4] 24)))))
+
+(deftest test-17214edb-20ba-42fc-bda8-000a5ab525b0
+  (testing "folds (reduces) the given vector from the right with a function -> empty vector"
+    (is (= 2 (list-ops/foldr (fn [acc el] (* el acc)) [] 2)))))
+
+(deftest test-e1c64db7-9253-4a3d-a7c4-5273b9e2a1bd
+  (testing "folds (reduces) the given vector from the right with a function -> direction independent function applied to non-empty vector"
+    (is (= 15 (list-ops/foldr (fn [acc el] (+ el acc)) [1 2 3 4] 5)))))
+
+(deftest test-8066003b-f2ff-437e-9103-66e6df474844
+  (testing "folds (reduces) the given vector from the right with a function -> direction dependent function applied to non-empty vector"
+    (is (= 9 (list-ops/foldr (fn [acc el] (/ el acc)) [1 2 3 4] 24)))))
+
+(deftest test-94231515-050e-4841-943d-d4488ab4ee30
+  (testing "reverse the elements of the vector -> empty vector"
+    (is (= [] (list-ops/reverse-order [])))))
+
+(deftest test-fcc03d1e-42e0-4712-b689-d54ad761f360
+  (testing "reverse the elements of the vector -> non-empty vector"
+    (is (= [7 5 3 1] (list-ops/reverse-order [1 3 5 7])))))
+
+(deftest test-40872990-b5b8-4cb8-9085-d91fc0d05d26
+  (testing "reverse the elements of the vector -> vector of vectors is not flattened"
+    (is (= [[4 5 6] [] [3] [1 2]] (list-ops/reverse-order [[1 2] [3] [] [4 5 6]])))))
diff --git a/exercises/practice/spiral-matrix/test/spiral_matrix_test.clj b/exercises/practice/spiral-matrix/test/spiral_matrix_test.clj
index 85dc9f9..ea4533e 100644
--- a/exercises/practice/spiral-matrix/test/spiral_matrix_test.clj
+++ b/exercises/practice/spiral-matrix/test/spiral_matrix_test.clj
@@ -1,58 +1,43 @@
 (ns spiral-matrix-test
   (:require [clojure.test :refer [deftest is testing]]
-            [spiral-matrix :refer [spiral]]))
+            spiral-matrix))
 
-(deftest spiral-matrix-of-0
-  (testing "spiral matrix of 0"
-    (is (= (spiral 0)
-           '()))))
+(deftest test-8f584201-b446-4bc9-b132-811c8edd9040
+  (testing "Empty spiral"
+    (is (= []
+           (spiral-matrix/spiral 0)))))
 
-(deftest spiral-matrix-of-1
-  (testing "spiral matrix of 1"
-    (is (= (spiral 1)
-           '((1))))))
+(deftest test-e40ae5f3-e2c9-4639-8116-8a119d632ab2
+  (testing "Trivial spiral"
+    (is (= [[1]]
+           (spiral-matrix/spiral 1)))))
 
-(deftest spiral-matrix-of-2
-  (testing "spiral matrix of 2"
-    (is (= (spiral 2)
-           '((1 2)
-             (4 3))))))
+(deftest test-cf05e42d-eb78-4098-a36e-cdaf0991bc48
+  (testing "Spiral of size 2"
+    (is (= [[1 2]
+            [4 3]]
+           (spiral-matrix/spiral 2)))))
 
-(deftest spiral-matrix-of-3
-  (testing "spiral matrix of 3"
-    (is (= (spiral 3)
-           '((1 2 3)
-             (8 9 4)
-             (7 6 5))))))
+(deftest test-1c475667-c896-4c23-82e2-e033929de939
+  (testing "Spiral of size 3"
+    (is (= [[1 2 3]
+            [8 9 4]
+            [7 6 5]]
+           (spiral-matrix/spiral 3)))))
 
-(deftest spiral-matrix-of-4
-  (testing "spiral matrix of 4"
-    (is (= (spiral 4)
-           '((1  2  3  4)
-             (12 13 14 5)
-             (11 16 15 6)
-             (10 9  8  7))))))
+(deftest test-05ccbc48-d891-44f5-9137-f4ce462a759d
+  (testing "Spiral of size 4"
+    (is (= [[1  2  3  4]
+            [12 13 14 5]
+            [11 16 15 6]
+            [10 9  8  7]]
+           (spiral-matrix/spiral 4)))))
 
-(deftest spiral-matrix-of-20
-  (testing "spiral matrix of 20"
-    (is (= (spiral 20)
-           '((1  2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20)
-             (76 77  78  79  80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  21)
-             (75 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 95  22)
-             (74 143 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 161 96  23)
-             (73 142 203 256 257 258 259 260 261 262 263 264 265 266 267 268 219 162 97  24)
-             (72 141 202 255 300 301 302 303 304 305 306 307 308 309 310 269 220 163 98  25)
-             (71 140 201 254 299 336 337 338 339 340 341 342 343 344 311 270 221 164 99  26)
-             (70 139 200 253 298 335 364 365 366 367 368 369 370 345 312 271 222 165 100 27)
-             (69 138 199 252 297 334 363 384 385 386 387 388 371 346 313 272 223 166 101 28)
-             (68 137 198 251 296 333 362 383 396 397 398 389 372 347 314 273 224 167 102 29)
-             (67 136 197 250 295 332 361 382 395 400 399 390 373 348 315 274 225 168 103 30)
-             (66 135 196 249 294 331 360 381 394 393 392 391 374 349 316 275 226 169 104 31)
-             (65 134 195 248 293 330 359 380 379 378 377 376 375 350 317 276 227 170 105 32)
-             (64 133 194 247 292 329 358 357 356 355 354 353 352 351 318 277 228 171 106 33)
-             (63 132 193 246 291 328 327 326 325 324 323 322 321 320 319 278 229 172 107 34)
-             (62 131 192 245 290 289 288 287 286 285 284 283 282 281 280 279 230 173 108 35)
-             (61 130 191 244 243 242 241 240 239 238 237 236 235 234 233 232 231 174 109 36)
-             (60 129 190 189 188 187 186 185 184 183 182 181 180 179 178 177 176 175 110 37)
-             (59 128 127 126 125 124 123 122 121 120 119 118 117 116 115 114 113 112 111 38)
-             (58 57  56  55  54  53  52  51  50  49  48  47  46  45  44  43  42  41  40  39))))))
+(deftest test-f4d2165b-1738-4e0c-bed0-c459045ae50d
+  (testing "Spiral of size 5"
+    (is (= [[1  2  3  4  5]
+            [16 17 18 19 6]
+            [15 24 25 20 7]
+            [14 23 22 21 8]
+            [13 12 11 10 9]]
+           (spiral-matrix/spiral 5)))))
diff --git a/exercises/practice/sublist/.meta/tests.toml b/exercises/practice/sublist/.meta/tests.toml
index 74bd60c..de5020a 100644
--- a/exercises/practice/sublist/.meta/tests.toml
+++ b/exercises/practice/sublist/.meta/tests.toml
@@ -1,6 +1,13 @@
-# This is an auto-generated file. Regular comments will be removed when this
-# file is regenerated. Regenerating will not touch any manually added keys,
-# so comments can be added in a "comment" key.
+# 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.
 
 [97319c93-ebc5-47ab-a022-02a1980e1d29]
 description = "empty lists"
@@ -47,6 +54,9 @@ description = "first list missing element from second list"
 [83ffe6d8-a445-4a3c-8795-1e51a95e65c3]
 description = "second list missing element from first list"
 
+[7bc76cb8-5003-49ca-bc47-cdfbe6c2bb89]
+description = "first list missing additional digits from second list"
+
 [0d7ee7c1-0347-45c8-9ef5-b88db152b30b]
 description = "order matters to a list"
 
diff --git a/exercises/practice/sublist/test/sublist_test.clj b/exercises/practice/sublist/test/sublist_test.clj
index c7fff7b..2533499 100644
--- a/exercises/practice/sublist/test/sublist_test.clj
+++ b/exercises/practice/sublist/test/sublist_test.clj
@@ -2,56 +2,74 @@
   (:require [clojure.test :refer [deftest is testing]]
             sublist))
 
-(deftest empty-lists-test
-    (is (= :equal (sublist/classify [] []))))
+(deftest test-97319c93-ebc5-47ab-a022-02a1980e1d29
+  (testing "Empty lists"
+    (is (= :equal (sublist/classify [] [])))))
 
-(deftest empty-list-within-non-empty-list-test
-    (is (= :sublist (sublist/classify [] [1 2 3]))))
+(deftest test-de27dbd4-df52-46fe-a336-30be58457382
+  (testing "Empty list within non empty list"
+    (is (= :sublist (sublist/classify [] [1 2 3])))))
 
-(deftest non-empty-list-contains-empty-list-test
-    (is (= :superlist (sublist/classify [1 2 3] []))))
+(deftest test-5487cfd1-bc7d-429f-ac6f-1177b857d4fb
+  (testing "Non empty list contains empty list"
+    (is (= :superlist (sublist/classify [1 2 3] [])))))
 
-(deftest list-equals-itself-test
-    (is (= :equal (sublist/classify [1 2 3] [1 2 3]))))
+(deftest test-1f390b47-f6b2-4a93-bc23-858ba5dda9a6
+  (testing "List equals itself"
+    (is (= :equal (sublist/classify [1 2 3] [1 2 3])))))
 
-(deftest different-lists
-    (is (= :unequal (sublist/classify [1 2 3] [2 3 4]))))
+(deftest test-7ed2bfb2-922b-4363-ae75-f3a05e8274f5
+  (testing "Different lists"
+    (is (= :unequal (sublist/classify [1 2 3] [2 3 4])))))
 
-(deftest false-start
-    (is (= :sublist (sublist/classify [1 2 5] [0 1 2 3 1 2 5 6]))))
+(deftest test-3b8a2568-6144-4f06-b0a1-9d266b365341
+  (testing "False start"
+    (is (= :sublist (sublist/classify [1 2 5] [0 1 2 3 1 2 5 6])))))
 
-(deftest consecutive
-    (is (= :sublist (sublist/classify [1 1 2] [0 1 1 1 2 1 2]))))
+(deftest test-dc39ed58-6311-4814-be30-05a64bc8d9b1
+  (testing "Consecutive"
+    (is (= :sublist (sublist/classify [1 1 2] [0 1 1 1 2 1 2])))))
 
-(deftest sublist-at-start
-    (is (= :sublist (sublist/classify [0 1 2] [0 1 2 3 4 5]))))
+(deftest test-d1270dab-a1ce-41aa-b29d-b3257241ac26
+  (testing "Sublist at start"
+    (is (= :sublist (sublist/classify [0 1 2] [0 1 2 3 4 5])))))
 
-(deftest sublist-in-middle
-    (is (= :sublist (sublist/classify [2 3 4] [0 1 2 3 4 5]))))
+(deftest test-81f3d3f7-4f25-4ada-bcdc-897c403de1b6
+  (testing "Sublist in middle"
+    (is (= :sublist (sublist/classify [2 3 4] [0 1 2 3 4 5])))))
 
-(deftest sublist-at-end
-    (is (= :sublist (sublist/classify [3 4 5] [0 1 2 3 4 5]))))
+(deftest test-43bcae1e-a9cf-470e-923e-0946e04d8fdd
+  (testing "Sublist at end"
+    (is (= :sublist (sublist/classify [3 4 5] [0 1 2 3 4 5])))))
 
-(deftest at-start-of-superlist
-    (is (= :superlist (sublist/classify [0 1 2 3 4 5] [0 1 2]))))
+(deftest test-76cf99ed-0ff0-4b00-94af-4dfb43fe5caa
+  (testing "At start of superlist"
+    (is (= :superlist (sublist/classify [0 1 2 3 4 5] [0 1 2])))))
 
-(deftest in-middle-of-superlist
-    (is (= :superlist (sublist/classify [0 1 2 3 4 5] [2 3]))))
+(deftest test-b83989ec-8bdf-4655-95aa-9f38f3e357fd
+  (testing "In middle of superlist"
+    (is (= :superlist (sublist/classify [0 1 2 3 4 5] [2 3])))))
 
-(deftest at-end-of-superlist
-    (is (= :superlist (sublist/classify [0 1 2 3 4 5] [3 4 5]))))
+(deftest test-26f9f7c3-6cf6-4610-984a-662f71f8689b
+  (testing "At end of superlist"
+    (is (= :superlist (sublist/classify [0 1 2 3 4 5] [3 4 5])))))
 
-(deftest first-list-missing-element-from-second-list
-    (is (= :unequal (sublist/classify [1 3] [1 2 3]))))
+(deftest test-0a6db763-3588-416a-8f47-76b1cedde31e
+  (testing "First list missing element from second list"
+    (is (= :unequal (sublist/classify [1 3] [1 2 3])))))
 
-(deftest second-list-missing-element-from-first-list
-    (is (= :unequal (sublist/classify [1 2 3] [1 3]))))
+(deftest test-83ffe6d8-a445-4a3c-8795-1e51a95e65c3
+  (testing "Second list missing element from first list"
+    (is (= :unequal (sublist/classify [1 2 3] [1 3])))))
 
-(deftest order-matters-to-a-list
-    (is (= :unequal (sublist/classify [1 2 3] [3 2 1]))))
+(deftest test-7bc76cb8-5003-49ca-bc47-cdfbe6c2bb89
+  (testing "First list missing additional digits from second list"
+    (is (= :unequal (sublist/classify [1 2] [1 22])))))
 
-(deftest same-digits-but-different-numbers
-    (is (= :unequal (sublist/classify [1 0 1] [10 1]))))
+(deftest test-0d7ee7c1-0347-45c8-9ef5-b88db152b30b
+  (testing "Order matters to a list"
+    (is (= :unequal (sublist/classify [1 2 3] [3 2 1])))))
 
-(deftest second-list-continues-first-list
-  (is (= :unequal (sublist/classify [1] [2 3]))))
+(deftest test-5f47ce86-944e-40f9-9f31-6368aad70aa6
+  (testing "Same digits but different numbers"
+    (is (= :unequal (sublist/classify [1 0 1] [10 1])))))