diff --git a/.github/workflows/order-of-practice-exercises.yml b/.github/workflows/order-of-practice-exercises.yml new file mode 100644 index 00000000..660aefca --- /dev/null +++ b/.github/workflows/order-of-practice-exercises.yml @@ -0,0 +1,16 @@ +name: Ensure practice exercise order + +on: + pull_request: + branches: + - main + +permissions: + contents: read + +jobs: + call-gha-workflow: + name: check + uses: exercism/github-actions/.github/workflows/sorted.yml@main + with: + ordering: ".difficulty, .lowercase_name" diff --git a/README.md b/README.md index de33c63c..73d530b6 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,7 @@ The following system dependencies are required: - [`bash` shell][gnu-bash]. - PHP V8.4+ CLI. - An active Internet connection for installing required tools / composer packages. +- [`jq`][jq], if you change the difficulty or add a practice exercise. Run the following command to get started with this project: @@ -90,6 +91,8 @@ contribution/generator/bin/console app:create-tests '' composer lint:fix ``` +Run `bin/order-exercises.sh` when you set the exercise difficulty to a sensible value to order the exercises on the website accordingly. + [exercism-configlet]: https://exercism.org/docs/building/configlet [exercism-docs]: https://exercism.org/docs [exercism-track-home]: https://exercism.org/docs/tracks/php @@ -98,3 +101,4 @@ composer lint:fix [gnu-bash]: https://www.gnu.org/software/bash/ [local-file-phpcs-config]: phpcs.xml [psr-12]: https://www.php-fig.org/psr/psr-12 +[jq]: https://jqlang.org/ diff --git a/bin/order-exercises.sh b/bin/order-exercises.sh new file mode 100755 index 00000000..5a4a8d26 --- /dev/null +++ b/bin/order-exercises.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +# matches ".difficulty, .lowercase_name" in .github/workflows/order-of-practice-exercises.yml + +jq ' + .exercises.practice |= ( + map(if .slug == "hello-world" then .difficulty = -1 else . end) + | sort_by(.difficulty, (.name|ascii_downcase)) + | .[0].difficulty = 1 + ) +' config.json > config.sorted && mv config.sorted config.json diff --git a/config.json b/config.json index 2c4111f1..3268f8fc 100644 --- a/config.json +++ b/config.json @@ -150,246 +150,6 @@ "text_formatting" ] }, - { - "slug": "reverse-string", - "name": "Reverse String", - "uuid": "cb533bd3-641d-47ad-a8ca-cebc76075c0b", - "practices": [], - "prerequisites": [], - "difficulty": 1, - "topics": [ - "strings" - ] - }, - { - "slug": "resistor-color", - "name": "Resistor Color", - "uuid": "141733c5-6d35-4320-a248-54f6a16f1f85", - "practices": [], - "prerequisites": [], - "difficulty": 1 - }, - { - "slug": "line-up", - "name": "Line up", - "uuid": "6016009e-9012-447a-87b7-d33ea01492d9", - "practices": [], - "prerequisites": [], - "difficulty": 2 - }, - { - "slug": "hamming", - "name": "Hamming", - "uuid": "48de430b-0d88-4af0-ab48-d00b840312bb", - "practices": [], - "prerequisites": [], - "difficulty": 2, - "topics": [ - "filtering", - "strings" - ] - }, - { - "slug": "resistor-color-duo", - "name": "Resistor Color Duo", - "uuid": "1e72df07-c456-4501-a274-4b0e2b245167", - "practices": [], - "prerequisites": [], - "difficulty": 1 - }, - { - "slug": "proverb", - "name": "Proverb", - "uuid": "75519a64-8237-49e5-927f-c5974816258e", - "practices": [], - "prerequisites": [], - "difficulty": 2 - }, - { - "slug": "gigasecond", - "name": "Gigasecond", - "uuid": "81aa4bc9-4936-46c2-bb2f-433246a86c5d", - "practices": [], - "prerequisites": [], - "difficulty": 2, - "topics": [ - "dates" - ] - }, - { - "slug": "tournament", - "name": "Tournament", - "uuid": "e0572cf4-5481-4da4-bf9b-0e921cb81627", - "practices": [], - "prerequisites": [], - "difficulty": 3, - "topics": [ - "parsing", - "strings" - ] - }, - { - "slug": "simple-cipher", - "name": "Simple Cipher", - "uuid": "054a332f-f6db-46eb-b86c-2c95829c9ed2", - "practices": [], - "prerequisites": [], - "difficulty": 6, - "topics": [ - "algorithms", - "conditionals", - "loops", - "randomness", - "strings", - "text_formatting", - "transforming" - ] - }, - { - "slug": "high-scores", - "name": "High Scores", - "uuid": "723b1abd-24e3-4a0d-a34d-20b7b76c9f59", - "practices": [], - "prerequisites": [], - "difficulty": 2, - "topics": [ - "arrays" - ] - }, - { - "slug": "bob", - "name": "Bob", - "uuid": "ae91650f-fe06-466a-a40a-6a24f5926fbe", - "practices": [], - "prerequisites": [], - "difficulty": 4, - "topics": [ - "control_flow_if_else_statements", - "strings" - ] - }, - { - "slug": "rna-transcription", - "name": "RNA Transcription", - "uuid": "81d96250-f2e4-4228-a8e9-254b6b8784ac", - "practices": [], - "prerequisites": [], - "difficulty": 3, - "topics": [ - "strings", - "transforming" - ] - }, - { - "slug": "luhn", - "name": "Luhn", - "uuid": "1b034dc9-be9a-4434-bc78-57742f63107e", - "practices": [], - "prerequisites": [], - "difficulty": 4 - }, - { - "slug": "isogram", - "name": "Isogram", - "uuid": "435f0ec1-f53c-4fe4-b92b-43a582c2fa82", - "practices": [], - "prerequisites": [], - "difficulty": 4, - "topics": [ - "filtering", - "strings" - ] - }, - { - "slug": "resistor-color-trio", - "name": "Resistor Color Trio", - "uuid": "eb3ef767-fb22-4f5a-96aa-e1f680644dd9", - "practices": [], - "prerequisites": [], - "difficulty": 3 - }, - { - "slug": "robot-name", - "name": "Robot Name", - "uuid": "b24d5f98-8d62-4177-b0ae-306bbf0f918b", - "practices": [], - "prerequisites": [], - "difficulty": 3, - "topics": [ - "classes", - "randomness", - "strings" - ] - }, - { - "slug": "twelve-days", - "name": "Twelve Days", - "uuid": "c5b122ab-6f8e-476b-8b55-84670edc93b5", - "practices": [], - "prerequisites": [], - "difficulty": 2 - }, - { - "slug": "difference-of-squares", - "name": "Difference of Squares", - "uuid": "238d86fe-6e29-43b0-9e27-a54caa773618", - "practices": [], - "prerequisites": [], - "difficulty": 2, - "topics": [ - "integers", - "math" - ] - }, - { - "slug": "grade-school", - "name": "Grade School", - "uuid": "2d2974e2-2d5e-41d9-8dc3-951967631b37", - "practices": [], - "prerequisites": [], - "difficulty": 6, - "topics": [ - "arrays" - ] - }, - { - "slug": "robot-simulator", - "name": "Robot Simulator", - "uuid": "cc6c3b27-b719-454c-a743-7bc73bd47cf1", - "practices": [], - "prerequisites": [], - "difficulty": 5, - "topics": [ - "oop" - ] - }, - { - "slug": "run-length-encoding", - "name": "Run-Length Encoding", - "uuid": "0a453685-55c2-47e2-88b2-e26d1d8fbde9", - "practices": [], - "prerequisites": [], - "difficulty": 5, - "topics": [ - "algorithms", - "strings", - "text_formatting" - ] - }, - { - "slug": "largest-series-product", - "name": "Largest Series Product", - "uuid": "4fbeb249-dc1d-4282-8455-d1c06a7cb420", - "practices": [], - "prerequisites": [], - "difficulty": 5, - "topics": [ - "integers", - "math", - "strings", - "transforming" - ] - }, { "slug": "accumulate", "name": "Accumulate", @@ -602,12 +362,12 @@ "difficulty": 1 }, { - "slug": "flower-field", - "name": "Flower Field", - "uuid": "3443aa60-53d4-4483-ad96-07eba9a23b9e", + "slug": "micro-blog", + "name": "Micro Blog", + "uuid": "203ba680-cdbd-494d-a1b6-af426bc84e59", "practices": [], "prerequisites": [], - "difficulty": 6 + "difficulty": 1 }, { "slug": "minesweeper", @@ -672,16 +432,43 @@ ] }, { - "slug": "series", - "name": "Series", - "uuid": "75718f1b-1f54-438d-a388-1c2faacafd32", + "slug": "resistor-color", + "name": "Resistor Color", + "uuid": "141733c5-6d35-4320-a248-54f6a16f1f85", "practices": [], "prerequisites": [], "difficulty": 1 }, { - "slug": "sieve", - "name": "Sieve", + "slug": "resistor-color-duo", + "name": "Resistor Color Duo", + "uuid": "1e72df07-c456-4501-a274-4b0e2b245167", + "practices": [], + "prerequisites": [], + "difficulty": 1 + }, + { + "slug": "reverse-string", + "name": "Reverse String", + "uuid": "cb533bd3-641d-47ad-a8ca-cebc76075c0b", + "practices": [], + "prerequisites": [], + "difficulty": 1, + "topics": [ + "strings" + ] + }, + { + "slug": "series", + "name": "Series", + "uuid": "75718f1b-1f54-438d-a388-1c2faacafd32", + "practices": [], + "prerequisites": [], + "difficulty": 1 + }, + { + "slug": "sieve", + "name": "Sieve", "uuid": "07258892-c06f-4833-97f6-56ead8ca113d", "practices": [], "prerequisites": [], @@ -779,27 +566,39 @@ ] }, { - "slug": "wordy", - "name": "Wordy", - "uuid": "85408bdd-3c22-4b5a-9c61-044ddfb0c3ac", + "slug": "armstrong-numbers", + "name": "Armstrong Numbers", + "uuid": "9e7be7f8-ea50-4245-bde3-2207f0bcebdd", "practices": [], "prerequisites": [], - "difficulty": 5, + "difficulty": 2, "topics": [ - "parsing", - "strings", - "transforming" + "algorithms", + "math" ] }, { - "slug": "armstrong-numbers", - "name": "Armstrong Numbers", - "uuid": "9e7be7f8-ea50-4245-bde3-2207f0bcebdd", + "slug": "darts", + "name": "Darts", + "uuid": "9875a830-b544-4060-9df1-7b7c1f1576f6", "practices": [], "prerequisites": [], "difficulty": 2, "topics": [ - "algorithms", + "conditionals", + "math", + "geometry" + ] + }, + { + "slug": "difference-of-squares", + "name": "Difference of Squares", + "uuid": "238d86fe-6e29-43b0-9e27-a54caa773618", + "practices": [], + "prerequisites": [], + "difficulty": 2, + "topics": [ + "integers", "math" ] }, @@ -815,23 +614,86 @@ ] }, { - "slug": "queen-attack", - "name": "Queen Attack", - "uuid": "94ceeb58-55c0-48b5-8a7c-d274f60b9010", + "slug": "gigasecond", + "name": "Gigasecond", + "uuid": "81aa4bc9-4936-46c2-bb2f-433246a86c5d", "practices": [], "prerequisites": [], "difficulty": 2, "topics": [ - "integers" + "dates" ] }, { - "slug": "protein-translation", - "name": "Protein Translation", - "uuid": "f5ae2594-7e6d-4722-b6fe-df179a71aada", + "slug": "hamming", + "name": "Hamming", + "uuid": "48de430b-0d88-4af0-ab48-d00b840312bb", "practices": [], "prerequisites": [], - "difficulty": 3 + "difficulty": 2, + "topics": [ + "filtering", + "strings" + ] + }, + { + "slug": "high-scores", + "name": "High Scores", + "uuid": "723b1abd-24e3-4a0d-a34d-20b7b76c9f59", + "practices": [], + "prerequisites": [], + "difficulty": 2, + "topics": [ + "arrays" + ] + }, + { + "slug": "isbn-verifier", + "name": "ISBN Verifier", + "uuid": "f7309216-0ba7-4990-acd7-4a47eca949fb", + "practices": [], + "prerequisites": [], + "difficulty": 2 + }, + { + "slug": "line-up", + "name": "Line up", + "uuid": "6016009e-9012-447a-87b7-d33ea01492d9", + "practices": [], + "prerequisites": [], + "difficulty": 2 + }, + { + "slug": "ordinal-number", + "name": "Ordinal Number", + "uuid": "48f2ed50-6169-4dd2-832f-6c41d016be64", + "practices": [], + "prerequisites": [], + "difficulty": 2, + "status": "deprecated", + "topics": [ + "strings", + "conditionals" + ] + }, + { + "slug": "proverb", + "name": "Proverb", + "uuid": "75519a64-8237-49e5-927f-c5974816258e", + "practices": [], + "prerequisites": [], + "difficulty": 2 + }, + { + "slug": "queen-attack", + "name": "Queen Attack", + "uuid": "94ceeb58-55c0-48b5-8a7c-d274f60b9010", + "practices": [], + "prerequisites": [], + "difficulty": 2, + "topics": [ + "integers" + ] }, { "slug": "raindrops", @@ -845,6 +707,14 @@ "text_formatting" ] }, + { + "slug": "say", + "name": "Say", + "uuid": "56873c13-5efd-462f-810f-1884d0c776a4", + "practices": [], + "prerequisites": [], + "difficulty": 2 + }, { "slug": "scrabble-score", "name": "Scrabble Score", @@ -858,6 +728,22 @@ "strings" ] }, + { + "slug": "strain", + "name": "Strain", + "uuid": "8872a713-cb44-4769-a67b-85bbd944a726", + "practices": [], + "prerequisites": [], + "difficulty": 2 + }, + { + "slug": "sublist", + "name": "Sublist", + "uuid": "a5323160-bb75-4dd7-8800-789a83cd7008", + "practices": [], + "prerequisites": [], + "difficulty": 2 + }, { "slug": "sum-of-multiples", "name": "Sum of Multiples", @@ -869,6 +755,22 @@ "math" ] }, + { + "slug": "twelve-days", + "name": "Twelve Days", + "uuid": "c5b122ab-6f8e-476b-8b55-84670edc93b5", + "practices": [], + "prerequisites": [], + "difficulty": 2 + }, + { + "slug": "yacht", + "name": "Yacht", + "uuid": "7b51a6cf-e8d1-4942-9e0a-fa65b56a3821", + "practices": [], + "prerequisites": [], + "difficulty": 2 + }, { "slug": "affine-cipher", "name": "Affine Cipher", @@ -894,6 +796,14 @@ "filtering" ] }, + { + "slug": "bank-account", + "name": "Bank Account", + "uuid": "d85c328b-0778-46f6-bd50-d14417fa8347", + "practices": [], + "prerequisites": [], + "difficulty": 3 + }, { "slug": "binary-search", "name": "Binary Search", @@ -902,6 +812,14 @@ "prerequisites": [], "difficulty": 3 }, + { + "slug": "binary-search-tree", + "name": "Binary Search Tree", + "uuid": "e13c2b59-75c1-4415-a439-b548721ebdbc", + "practices": [], + "prerequisites": [], + "difficulty": 3 + }, { "slug": "book-store", "name": "Book Store", @@ -914,16 +832,20 @@ ] }, { - "slug": "grains", - "name": "Grains", - "uuid": "3b001897-4052-4dab-84fd-b971a9946e0a", + "slug": "house", + "name": "House", + "uuid": "76a067bc-5bc3-47de-a539-69eb6c80473a", "practices": [], "prerequisites": [], - "difficulty": 4, - "topics": [ - "algorithms", - "floating_point_numbers" - ] + "difficulty": 3 + }, + { + "slug": "kindergarten-garden", + "name": "Kindergarten Garden", + "uuid": "2fd3d924-477d-4113-96a5-c9687776da49", + "practices": [], + "prerequisites": [], + "difficulty": 3 }, { "slug": "markdown", @@ -937,27 +859,27 @@ ] }, { - "slug": "nth-prime", - "name": "Nth Prime", - "uuid": "29a3bb8c-298a-4976-8274-c69ec7a0058a", + "slug": "mask-credit-card", + "name": "Mask Credit Card", + "uuid": "8ea0a659-df50-4575-b6a4-2a0e8d29738a", "practices": [], "prerequisites": [], "difficulty": 3, "topics": [ - "math" + "regex", + "strings", + "conditionals" ] }, { - "slug": "ocr-numbers", - "name": "OCR Numbers", - "uuid": "a7a269a5-e99c-4fcf-b331-9a130e94f9e4", + "slug": "nth-prime", + "name": "Nth Prime", + "uuid": "29a3bb8c-298a-4976-8274-c69ec7a0058a", "practices": [], "prerequisites": [], - "difficulty": 5, + "difficulty": 3, "topics": [ - "algorithms", - "strings", - "transforming" + "math" ] }, { @@ -971,19 +893,6 @@ "math" ] }, - { - "slug": "matrix", - "name": "Matrix", - "uuid": "6d66ec15-b31d-4383-932d-45bc28db0647", - "practices": [], - "prerequisites": [], - "difficulty": 4, - "topics": [ - "strings", - "matrices", - "transforming" - ] - }, { "slug": "prime-factors", "name": "Prime Factors", @@ -996,151 +905,177 @@ ] }, { - "slug": "dnd-character", - "name": "D&D Character", - "uuid": "99f94460-fc85-488e-b547-1d235fa84e74", + "slug": "protein-translation", + "name": "Protein Translation", + "uuid": "f5ae2594-7e6d-4722-b6fe-df179a71aada", "practices": [], "prerequisites": [], - "difficulty": 4, + "difficulty": 3 + }, + { + "slug": "resistor-color-trio", + "name": "Resistor Color Trio", + "uuid": "eb3ef767-fb22-4f5a-96aa-e1f680644dd9", + "practices": [], + "prerequisites": [], + "difficulty": 3 + }, + { + "slug": "rna-transcription", + "name": "RNA Transcription", + "uuid": "81d96250-f2e4-4228-a8e9-254b6b8784ac", + "practices": [], + "prerequisites": [], + "difficulty": 3, "topics": [ - "games", - "randomness" + "strings", + "transforming" ] }, { - "slug": "pangram", - "name": "Pangram", - "uuid": "4f15fc17-f68e-43bc-9417-403dd6d03f4f", + "slug": "robot-name", + "name": "Robot Name", + "uuid": "b24d5f98-8d62-4177-b0ae-306bbf0f918b", "practices": [], "prerequisites": [], - "difficulty": 4, + "difficulty": 3, "topics": [ + "classes", + "randomness", "strings" ] }, { - "slug": "strain", - "name": "Strain", - "uuid": "8872a713-cb44-4769-a67b-85bbd944a726", + "slug": "rotational-cipher", + "name": "Rotational Cipher", + "uuid": "61add6ab-9eaa-4fbc-b060-8ac44f47fad7", "practices": [], "prerequisites": [], - "difficulty": 2 + "difficulty": 3 }, { - "slug": "pig-latin", - "name": "Pig Latin", - "uuid": "af8f9ed1-1351-430b-a9dd-bdd2ba4e9a82", + "slug": "tournament", + "name": "Tournament", + "uuid": "e0572cf4-5481-4da4-bf9b-0e921cb81627", + "practices": [], + "prerequisites": [], + "difficulty": 3, + "topics": [ + "parsing", + "strings" + ] + }, + { + "slug": "bob", + "name": "Bob", + "uuid": "ae91650f-fe06-466a-a40a-6a24f5926fbe", "practices": [], "prerequisites": [], "difficulty": 4, "topics": [ - "strings", - "transforming" + "control_flow_if_else_statements", + "strings" ] }, { - "slug": "roman-numerals", - "name": "Roman Numerals", - "uuid": "210e1252-f92a-44b9-9916-8b27633fee0c", + "slug": "dnd-character", + "name": "D&D Character", + "uuid": "99f94460-fc85-488e-b547-1d235fa84e74", "practices": [], "prerequisites": [], "difficulty": 4, "topics": [ - "control_flow_loops", - "transforming" + "games", + "randomness" ] }, { - "slug": "sublist", - "name": "Sublist", - "uuid": "a5323160-bb75-4dd7-8800-789a83cd7008", + "slug": "food-chain", + "name": "Food Chain", + "uuid": "9fa82e62-1dd3-45c4-ae33-6c854a7b92b5", "practices": [], "prerequisites": [], - "difficulty": 2 + "difficulty": 4 }, { - "slug": "poker", - "name": "Poker", - "uuid": "e8669c8e-bfdd-4207-baf6-23c2e4b12d13", + "slug": "grains", + "name": "Grains", + "uuid": "3b001897-4052-4dab-84fd-b971a9946e0a", "practices": [], "prerequisites": [], - "difficulty": 5, + "difficulty": 4, "topics": [ - "games", - "parsing", - "sorting" + "algorithms", + "floating_point_numbers" ] }, { - "slug": "linked-list", - "name": "Linked List", - "uuid": "e5f10431-8312-4d6c-abfa-332cd7beea42", + "slug": "isogram", + "name": "Isogram", + "uuid": "435f0ec1-f53c-4fe4-b92b-43a582c2fa82", "practices": [], "prerequisites": [], - "difficulty": 5, + "difficulty": 4, "topics": [ - "classes", - "lists" + "filtering", + "strings" ] }, { - "slug": "palindrome-products", - "name": "Palindrome Products", - "uuid": "3201ddeb-9046-4801-a31a-28c292686e1e", + "slug": "luhn", + "name": "Luhn", + "uuid": "1b034dc9-be9a-4434-bc78-57742f63107e", "practices": [], "prerequisites": [], - "difficulty": 6, - "topics": [ - "algorithms", - "math" - ] + "difficulty": 4 }, { - "slug": "darts", - "name": "Darts", - "uuid": "9875a830-b544-4060-9df1-7b7c1f1576f6", + "slug": "matrix", + "name": "Matrix", + "uuid": "6d66ec15-b31d-4383-932d-45bc28db0647", "practices": [], "prerequisites": [], - "difficulty": 2, + "difficulty": 4, "topics": [ - "conditionals", - "math", - "geometry" + "strings", + "matrices", + "transforming" ] }, { - "slug": "mask-credit-card", - "name": "Mask Credit Card", - "uuid": "8ea0a659-df50-4575-b6a4-2a0e8d29738a", + "slug": "pangram", + "name": "Pangram", + "uuid": "4f15fc17-f68e-43bc-9417-403dd6d03f4f", "practices": [], "prerequisites": [], - "difficulty": 3, + "difficulty": 4, "topics": [ - "regex", - "strings", - "conditionals" + "strings" ] }, { - "slug": "ordinal-number", - "name": "Ordinal Number", - "uuid": "48f2ed50-6169-4dd2-832f-6c41d016be64", + "slug": "pig-latin", + "name": "Pig Latin", + "uuid": "af8f9ed1-1351-430b-a9dd-bdd2ba4e9a82", "practices": [], "prerequisites": [], - "difficulty": 2, - "status": "deprecated", + "difficulty": 4, "topics": [ "strings", - "conditionals" + "transforming" ] }, { - "slug": "house", - "name": "House", - "uuid": "76a067bc-5bc3-47de-a539-69eb6c80473a", + "slug": "roman-numerals", + "name": "Roman Numerals", + "uuid": "210e1252-f92a-44b9-9916-8b27633fee0c", "practices": [], "prerequisites": [], - "difficulty": 3 + "difficulty": 4, + "topics": [ + "control_flow_loops", + "transforming" + ] }, { "slug": "scale-generator", @@ -1156,12 +1091,20 @@ ] }, { - "slug": "bank-account", - "name": "Bank Account", - "uuid": "d85c328b-0778-46f6-bd50-d14417fa8347", + "slug": "secret-handshake", + "name": "Secret Handshake", + "uuid": "c0721b15-5bfb-4a2e-92d3-b2e32c096810", "practices": [], "prerequisites": [], - "difficulty": 3 + "difficulty": 4 + }, + { + "slug": "spiral-matrix", + "name": "Spiral Matrix", + "uuid": "a8d52588-a7af-4543-867b-17f9728df77e", + "practices": [], + "prerequisites": [], + "difficulty": 4 }, { "slug": "alphametics", @@ -1172,93 +1115,134 @@ "difficulty": 5 }, { - "slug": "micro-blog", - "name": "Micro Blog", - "uuid": "203ba680-cdbd-494d-a1b6-af426bc84e59", + "slug": "eliuds-eggs", + "name": "Eliud's Eggs", + "uuid": "9a8df843-8805-4287-b863-b8123defc266", "practices": [], "prerequisites": [], - "difficulty": 1 + "difficulty": 5 }, { - "slug": "yacht", - "name": "Yacht", - "uuid": "7b51a6cf-e8d1-4942-9e0a-fa65b56a3821", + "slug": "killer-sudoku-helper", + "name": "Killer Sudoku Helper", + "uuid": "1ccf740f-9c81-4742-8e00-1ecc5c52d7a3", "practices": [], "prerequisites": [], - "difficulty": 2 + "difficulty": 5 }, { - "slug": "binary-search-tree", - "name": "Binary Search Tree", - "uuid": "e13c2b59-75c1-4415-a439-b548721ebdbc", + "slug": "knapsack", + "name": "Knapsack", + "uuid": "79cdfd22-2c85-46af-ac00-719ac89bd5a9", "practices": [], "prerequisites": [], - "difficulty": 3 + "difficulty": 5 }, { - "slug": "isbn-verifier", - "name": "ISBN Verifier", - "uuid": "f7309216-0ba7-4990-acd7-4a47eca949fb", + "slug": "largest-series-product", + "name": "Largest Series Product", + "uuid": "4fbeb249-dc1d-4282-8455-d1c06a7cb420", "practices": [], "prerequisites": [], - "difficulty": 2 + "difficulty": 5, + "topics": [ + "integers", + "math", + "strings", + "transforming" + ] }, { - "slug": "say", - "name": "Say", - "uuid": "56873c13-5efd-462f-810f-1884d0c776a4", + "slug": "linked-list", + "name": "Linked List", + "uuid": "e5f10431-8312-4d6c-abfa-332cd7beea42", "practices": [], "prerequisites": [], - "difficulty": 2 + "difficulty": 5, + "topics": [ + "classes", + "lists" + ] }, { - "slug": "list-ops", - "name": "List Ops", - "uuid": "56f36086-96a8-4941-8c46-b563f02e5b09", + "slug": "ocr-numbers", + "name": "OCR Numbers", + "uuid": "a7a269a5-e99c-4fcf-b331-9a130e94f9e4", "practices": [], "prerequisites": [], - "difficulty": 6 + "difficulty": 5, + "topics": [ + "algorithms", + "strings", + "transforming" + ] }, { - "slug": "spiral-matrix", - "name": "Spiral Matrix", - "uuid": "a8d52588-a7af-4543-867b-17f9728df77e", + "slug": "poker", + "name": "Poker", + "uuid": "e8669c8e-bfdd-4207-baf6-23c2e4b12d13", "practices": [], "prerequisites": [], - "difficulty": 4 + "difficulty": 5, + "topics": [ + "games", + "parsing", + "sorting" + ] }, { - "slug": "zebra-puzzle", - "name": "Zebra Puzzle", - "uuid": "8a87919b-3bd0-4fc8-9774-daecd148de42", + "slug": "robot-simulator", + "name": "Robot Simulator", + "uuid": "cc6c3b27-b719-454c-a743-7bc73bd47cf1", "practices": [], "prerequisites": [], - "difficulty": 7 + "difficulty": 5, + "topics": [ + "oop" + ] }, { - "slug": "knapsack", - "name": "Knapsack", - "uuid": "79cdfd22-2c85-46af-ac00-719ac89bd5a9", + "slug": "run-length-encoding", + "name": "Run-Length Encoding", + "uuid": "0a453685-55c2-47e2-88b2-e26d1d8fbde9", "practices": [], "prerequisites": [], - "difficulty": 5 + "difficulty": 5, + "topics": [ + "algorithms", + "strings", + "text_formatting" + ] }, { - "slug": "secret-handshake", - "name": "Secret Handshake", - "uuid": "c0721b15-5bfb-4a2e-92d3-b2e32c096810", + "slug": "state-of-tic-tac-toe", + "name": "State of Tic-Tac-Toe", + "uuid": "64ea517d-88ec-46db-b723-004681255580", "practices": [], "prerequisites": [], - "difficulty": 4 + "difficulty": 5 }, { - "slug": "killer-sudoku-helper", - "name": "Killer Sudoku Helper", - "uuid": "1ccf740f-9c81-4742-8e00-1ecc5c52d7a3", + "slug": "two-bucket", + "name": "Two Bucket", + "uuid": "516250c6-6e1b-4710-b2b9-6bef1716c6d8", "practices": [], "prerequisites": [], "difficulty": 5 }, + { + "slug": "wordy", + "name": "Wordy", + "uuid": "85408bdd-3c22-4b5a-9c61-044ddfb0c3ac", + "practices": [], + "prerequisites": [], + "difficulty": 5, + "topics": [ + "parsing", + "strings", + "transforming" + ] + }, { "slug": "circular-buffer", "name": "Circular Buffer", @@ -1268,52 +1252,68 @@ "difficulty": 6 }, { - "slug": "state-of-tic-tac-toe", - "name": "State of Tic-Tac-Toe", - "uuid": "64ea517d-88ec-46db-b723-004681255580", + "slug": "flower-field", + "name": "Flower Field", + "uuid": "3443aa60-53d4-4483-ad96-07eba9a23b9e", "practices": [], "prerequisites": [], - "difficulty": 5 + "difficulty": 6 }, { - "slug": "food-chain", - "name": "Food Chain", - "uuid": "9fa82e62-1dd3-45c4-ae33-6c854a7b92b5", + "slug": "grade-school", + "name": "Grade School", + "uuid": "2d2974e2-2d5e-41d9-8dc3-951967631b37", "practices": [], "prerequisites": [], - "difficulty": 4 + "difficulty": 6, + "topics": [ + "arrays" + ] }, { - "slug": "kindergarten-garden", - "name": "Kindergarten Garden", - "uuid": "2fd3d924-477d-4113-96a5-c9687776da49", + "slug": "list-ops", + "name": "List Ops", + "uuid": "56f36086-96a8-4941-8c46-b563f02e5b09", "practices": [], "prerequisites": [], - "difficulty": 3 + "difficulty": 6 }, { - "slug": "rotational-cipher", - "name": "Rotational Cipher", - "uuid": "61add6ab-9eaa-4fbc-b060-8ac44f47fad7", + "slug": "palindrome-products", + "name": "Palindrome Products", + "uuid": "3201ddeb-9046-4801-a31a-28c292686e1e", "practices": [], "prerequisites": [], - "difficulty": 3 + "difficulty": 6, + "topics": [ + "algorithms", + "math" + ] }, { - "slug": "two-bucket", - "name": "Two Bucket", - "uuid": "516250c6-6e1b-4710-b2b9-6bef1716c6d8", + "slug": "simple-cipher", + "name": "Simple Cipher", + "uuid": "054a332f-f6db-46eb-b86c-2c95829c9ed2", "practices": [], "prerequisites": [], - "difficulty": 5 + "difficulty": 6, + "topics": [ + "algorithms", + "conditionals", + "loops", + "randomness", + "strings", + "text_formatting", + "transforming" + ] }, { - "slug": "eliuds-eggs", - "name": "Eliud's Eggs", - "uuid": "9a8df843-8805-4287-b863-b8123defc266", + "slug": "zebra-puzzle", + "name": "Zebra Puzzle", + "uuid": "8a87919b-3bd0-4fc8-9774-daecd148de42", "practices": [], "prerequisites": [], - "difficulty": 5 + "difficulty": 7 } ], "foregone": [