From 7305a9eed3842d37663a5539ba2edab6a0d52e27 Mon Sep 17 00:00:00 2001 From: Angelika Tyborska Date: Mon, 1 Mar 2021 09:26:29 +0100 Subject: [PATCH] [v3] Add prerequisites to Practice Exercises (#583) Co-authored-by: Tim Austin --- .prettierignore | 11 + .prettierrc | 17 + config.json | 1831 ++++++++++++--------- exercises/practice/zipper/lib/bin_tree.ex | 2 +- 4 files changed, 1059 insertions(+), 802 deletions(-) create mode 100644 .prettierignore create mode 100644 .prettierrc diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000000..426829f770 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,11 @@ +# IDE files +.idea/ +.vscode/ +.vs/ +.ionide/ + +# GitHub templates +.github/ISSUE_TEMPLATE/**/* + +# Language docs files +docs/** \ No newline at end of file diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000000..d996376878 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,17 @@ +{ + "arrowParens": "always", + "bracketSpacing": true, + "embeddedLanguageFormatting": "auto", + "endOfLine": "auto", + "htmlWhitespaceSensitivity": "css", + "insertPragma": false, + "printWidth": 80, + "proseWrap": "preserve", + "quoteProps": "as-needed", + "semi": false, + "singleQuote": true, + "tabWidth": 2, + "trailingComma": "es5", + "useTabs": false, + "vueIndentScriptAndStyle": false +} diff --git a/config.json b/config.json index ae505b7229..c1af08b2ee 100644 --- a/config.json +++ b/config.json @@ -34,9 +34,7 @@ "slug": "lasagna", "name": "Lasagna", "uuid": "c29c6092-9d44-4f21-8138-b873384fd90b", - "concepts": [ - "basics" - ], + "concepts": ["basics"], "prerequisites": [], "status": "beta" }, @@ -44,50 +42,32 @@ "slug": "pacman-rules", "name": "Pacman Rules", "uuid": "5e743355-1ef3-4b5d-b59d-03bbc9697e6c", - "concepts": [ - "booleans" - ], - "prerequisites": [ - "basics" - ], + "concepts": ["booleans"], + "prerequisites": ["basics"], "status": "beta" }, { "slug": "freelancer-rates", "name": "Freelancer Rates", "uuid": "fee79e03-1496-476f-964f-e60632cb13dc", - "concepts": [ - "integers", - "floating-point-numbers" - ], - "prerequisites": [ - "basics" - ], + "concepts": ["integers", "floating-point-numbers"], + "prerequisites": ["basics"], "status": "beta" }, { "slug": "log-level", "name": "Log Level", "uuid": "b26a2f11-d80a-42b9-881a-3575a83ad211", - "concepts": [ - "cond", - "atoms" - ], - "prerequisites": [ - "booleans" - ], + "concepts": ["cond", "atoms"], + "prerequisites": ["booleans"], "status": "beta" }, { "slug": "language-list", "name": "Language List", "uuid": "3c53b340-680e-45c1-8979-3d79b441a65e", - "concepts": [ - "lists" - ], - "prerequisites": [ - "booleans" - ], + "concepts": ["lists"], + "prerequisites": ["booleans"], "status": "beta" }, { @@ -99,32 +79,22 @@ "guards", "default-arguments" ], - "prerequisites": [ - "cond" - ], + "prerequisites": ["cond"], "status": "beta" }, { "slug": "secrets", "name": "Secrets", "uuid": "1e3ceb20-715c-4157-9192-13284217affc", - "concepts": [ - "anonymous-functions", - "bit-manipulation" - ], - "prerequisites": [ - "basics" - ], + "concepts": ["anonymous-functions", "bit-manipulation"], + "prerequisites": ["basics"], "status": "beta" }, { "slug": "kitchen-calculator", "name": "Kitchen Calculator", "uuid": "f729493d-2249-4c10-9c77-da907d10aae1", - "concepts": [ - "tuples", - "pattern-matching" - ], + "concepts": ["tuples", "pattern-matching"], "prerequisites": [ "atoms", "floating-point-numbers", @@ -136,38 +106,23 @@ "slug": "high-school-sweetheart", "name": "High School Sweetheart", "uuid": "335df1cf-6aba-4ab6-b5c3-b4305ade09a4", - "concepts": [ - "strings", - "pipe-operator" - ], - "prerequisites": [ - "lists", - "pattern-matching" - ], + "concepts": ["strings", "pipe-operator"], + "prerequisites": ["lists", "pattern-matching"], "status": "beta" }, { "slug": "name-badge", "name": "Name Badge", "uuid": "b6ae6cb4-f908-436f-916c-fa847e4a82fb", - "concepts": [ - "nil", - "if" - ], - "prerequisites": [ - "strings", - "booleans" - ], + "concepts": ["nil", "if"], + "prerequisites": ["strings", "booleans"], "status": "beta" }, { "slug": "high-score", "name": "High Score", "uuid": "e7f3ba2b-a380-45d3-a48d-7ef3dc318a31", - "concepts": [ - "module-attributes-as-constants", - "maps" - ], + "concepts": ["module-attributes-as-constants", "maps"], "prerequisites": [ "lists", "tuples", @@ -180,9 +135,7 @@ "slug": "bird-count", "name": "Bird Count", "uuid": "e17088c8-c40f-4d4c-b5dd-d32f62b8087b", - "concepts": [ - "recursion" - ], + "concepts": ["recursion"], "prerequisites": [ "lists", "pattern-matching", @@ -195,70 +148,39 @@ "slug": "german-sysadmin", "name": "German Sysadmin", "uuid": "45f3a08f-fe0f-4e3e-b325-47bad3c74ea4", - "concepts": [ - "charlists", - "case" - ], - "prerequisites": [ - "lists", - "recursion", - "pattern-matching", - "guards" - ], + "concepts": ["charlists", "case"], + "prerequisites": ["lists", "recursion", "pattern-matching", "guards"], "status": "beta" }, { "slug": "basketball-website", "name": "Basketball Website", "uuid": "ba03df1d-20e4-4527-a8a7-afc97a834975", - "concepts": [ - "access-behaviour" - ], - "prerequisites": [ - "maps", - "strings", - "recursion", - "nil" - ], + "concepts": ["access-behaviour"], + "prerequisites": ["maps", "strings", "recursion", "nil"], "status": "beta" }, { "slug": "file-sniffer", "name": "File Sniffer", "uuid": "1653d476-5354-4d99-a990-1db418a7281c", - "concepts": [ - "binaries" - ], - "prerequisites": [ - "strings", - "pattern-matching", - "if", - "bitstrings" - ], + "concepts": ["binaries"], + "prerequisites": ["strings", "pattern-matching", "if", "bitstrings"], "status": "beta" }, { "slug": "dna-encoding", "name": "DNA Encoding", "uuid": "994c8760-8a58-4ef3-8a28-a0f9182f4d9f", - "concepts": [ - "bitstrings", - "tail-call-recursion" - ], - "prerequisites": [ - "charlists", - "recursion", - "pattern-matching" - ], + "concepts": ["bitstrings", "tail-call-recursion"], + "prerequisites": ["charlists", "recursion", "pattern-matching"], "status": "beta" }, { "slug": "boutique-inventory", "name": "Boutique Inventory", "uuid": "be4ef2d1-2851-425d-9780-0326fbcb9845", - "concepts": [ - "enum" - ], + "concepts": ["enum"], "prerequisites": [ "lists", "maps", @@ -273,24 +195,15 @@ "slug": "rpn-calculator", "name": "RPN Calculator", "uuid": "f660a2e1-bb50-4626-8d3f-6cd7c44fa8db", - "concepts": [ - "errors", - "try-rescue" - ], - "prerequisites": [ - "anonymous-functions", - "pattern-matching", - "structs" - ], + "concepts": ["errors", "try-rescue"], + "prerequisites": ["anonymous-functions", "pattern-matching", "structs"], "status": "beta" }, { "slug": "remote-control-car", "name": "Remote Control Car", "uuid": "d8d25b93-d918-421e-bb57-cbdaf428d9e2", - "concepts": [ - "structs" - ], + "concepts": ["structs"], "prerequisites": [ "maps", "multiple-clause-functions", @@ -306,22 +219,15 @@ "slug": "stack-underflow", "name": "Stack Underflow", "uuid": "9f698b46-fe8d-4641-a928-bcebfd9678df", - "concepts": [ - "exceptions" - ], - "prerequisites": [ - "access-behaviour", - "errors" - ], + "concepts": ["exceptions"], + "prerequisites": ["access-behaviour", "errors"], "status": "beta" }, { "slug": "wine-cellar", "name": "Wine Cellar", "uuid": "921a03be-662a-4aea-b8fc-a87d199b1528", - "concepts": [ - "keyword-lists" - ], + "concepts": ["keyword-lists"], "prerequisites": [ "lists", "tuples", @@ -335,125 +241,71 @@ "slug": "rpn-calculator-output", "name": "RPN Calculator Output", "uuid": "68a8f721-5db4-4b31-95c8-fa6c38f64327", - "concepts": [ - "try-rescue-else-after", - "dynamic-dispatch" - ], - "prerequisites": [ - "file", - "try-rescue" - ], + "concepts": ["try-rescue-else-after", "dynamic-dispatch"], + "prerequisites": ["file", "try-rescue"], "status": "wip" }, { "slug": "take-a-number", "name": "Take-A-Number", "uuid": "bec0b00f-816e-443a-af94-14ab4125e505", - "concepts": [ - "processes", - "pids" - ], - "prerequisites": [ - "atoms", - "recursion", - "pattern-matching", - "tuples" - ], + "concepts": ["processes", "pids"], + "prerequisites": ["atoms", "recursion", "pattern-matching", "tuples"], "status": "beta" }, { "slug": "mensch-aergere-dich-nicht", "name": "Mensch Ärgere Dich Nicht", "uuid": "3e2f8bc6-20b4-4e8f-a658-9c270342208e", - "concepts": [ - "streams" - ], - "prerequisites": [ - "enum", - "tuples", - "if", - "ranges", - "randomness" - ], + "concepts": ["streams"], + "prerequisites": ["enum", "tuples", "if", "ranges", "randomness"], "status": "wip" }, { "slug": "community-garden", "name": "Community Garden", "uuid": "1d6be9ec-5b5c-4c81-9bfa-2e3fc78c978f", - "concepts": [ - "agent" - ], - "prerequisites": [ - "processes", - "maps", - "structs" - ], + "concepts": ["agent"], + "prerequisites": ["processes", "maps", "structs"], "status": "beta" }, { "slug": "date-parser", "name": "Date Parser", "uuid": "57198686-71c9-4f38-973a-a111435560e7", - "concepts": [ - "regular-expressions" - ], - "prerequisites": [ - "strings" - ], + "concepts": ["regular-expressions"], + "prerequisites": ["strings"], "status": "beta" }, { "slug": "boutique-suggestions", "name": "Boutique Suggestions", "uuid": "f8208858-901e-4e5a-9f34-689bf8ad156c", - "concepts": [ - "list-comprehensions" - ], - "prerequisites": [ - "enum", - "lists", - "maps", - "keyword-lists", - "tuples" - ], + "concepts": ["list-comprehensions"], + "prerequisites": ["enum", "lists", "maps", "keyword-lists", "tuples"], "status": "beta" }, { "slug": "bread-and-potions", "name": "Bread And Potions", "uuid": "a9fb9efa-ff37-4642-9118-c1351fd343ad", - "concepts": [ - "protocols" - ], - "prerequisites": [ - "structs", - "nil" - ], + "concepts": ["protocols"], + "prerequisites": ["structs", "nil"], "status": "beta" }, { "slug": "rpg-character-sheet", "name": "RPG Character Sheet", "uuid": "83c31f5f-fc94-4315-9053-df5a5f5d5fb7", - "concepts": [ - "io" - ], - "prerequisites": [ - "strings", - "maps", - "atoms" - ], + "concepts": ["io"], + "prerequisites": ["strings", "maps", "atoms"], "status": "beta" }, { "slug": "captains-log", "name": "Captain's Log", "uuid": "d805ae23-b5c9-494f-ab13-78a0e836391c", - "concepts": [ - "erlang-libraries", - "randomness" - ], + "concepts": ["erlang-libraries", "randomness"], "prerequisites": [ "enum", "ranges", @@ -468,40 +320,23 @@ "slug": "chessboard", "name": "Chessboard", "uuid": "6ea28f3e-a59a-45b0-83a7-38a2e96bdff7", - "concepts": [ - "ranges" - ], - "prerequisites": [ - "enum", - "integers", - "bitstrings", - "charlists" - ], + "concepts": ["ranges"], + "prerequisites": ["enum", "integers", "bitstrings", "charlists"], "status": "beta" }, { "slug": "newsletter", "name": "Newsletter", "uuid": "5564c89c-4706-4a48-99a4-2ad26457f66f", - "concepts": [ - "file" - ], - "prerequisites": [ - "strings", - "enum", - "io", - "processes", - "pids" - ], + "concepts": ["file"], + "prerequisites": ["strings", "enum", "io", "processes", "pids"], "status": "beta" }, { "slug": "library-fees", "name": "Library Fees", "uuid": "b5629003-638c-47c0-ad76-a0769f285053", - "concepts": [ - "dates-and-time" - ], + "concepts": ["dates-and-time"], "prerequisites": [ "integers", "floating-point-numbers", @@ -518,453 +353,591 @@ "name": "Hello World", "uuid": "cc96d65d-1c79-40d0-8fd2-9a6665a43b01", "prerequisites": [], - "difficulty": 1, - "topics": [ - "strings" - ] + "practices": [], + "difficulty": 1 }, { "slug": "rna-transcription", "name": "RNA Transcription", "uuid": "a4629a60-752f-4234-99f1-6b3ac0b4ba18", - "prerequisites": [], - "difficulty": 2, - "topics": [ - "strings" - ] + "prerequisites": [ + "charlists", + "pattern-matching", + "multiple-clause-functions", + "case", + "enum" + ], + "practices": ["charlists", "enum"], + "difficulty": 2 }, { "slug": "word-count", "name": "Word Count", "uuid": "4a24ba2f-ae92-4095-be53-64bc881422ea", - "prerequisites": [], - "difficulty": 3, - "topics": [ - "lists", + "prerequisites": [ + "strings", + "regular-expressions", + "enum", "maps", - "reduce" - ] + "pipe-operator" + ], + "practices": ["strings", "regular-expressions", "pipe-operator"], + "difficulty": 3 }, { "slug": "roman-numerals", "name": "Roman Numerals", "uuid": "4c0ece49-5710-43a1-88b3-2fb149de8552", - "prerequisites": [], - "difficulty": 2, - "topics": [ - "algorithms", - "pattern_matching" - ] + "prerequisites": [ + "strings", + "recursion", + "guards", + "default-arguments", + "multiple-clause-functions", + "enum", + "maps", + "cond", + "case" + ], + "practices": ["recursion"], + "difficulty": 2 }, { "slug": "bob", "name": "Bob", "uuid": "d20b49dc-cb6d-45fc-a168-78d002072c75", - "prerequisites": [], - "difficulty": 2, - "topics": [ - "control_flow", - "string_processing" - ] + "prerequisites": ["booleans", "strings", "regular-expressions", "cond"], + "practices": ["booleans", "strings", "cond"], + "difficulty": 3 }, { "slug": "beer-song", "name": "Beer Song", "uuid": "24db624b-7c80-409d-97d5-e1177f025c67", - "prerequisites": [], - "difficulty": 3, - "topics": [ - "pattern_matching", + "prerequisites": [ + "strings", + "multiple-clause-functions", + "default-arguments", + "ranges", + "enum", "recursion" - ] + ], + "practices": [ + "multiple-clause-functions", + "default-arguments", + "strings" + ], + "difficulty": 3 }, { "slug": "robot-simulator", "name": "Robot Simulator", "uuid": "e5e55560-852f-4551-b4da-c9f4a3141470", - "prerequisites": [], - "difficulty": 6, - "topics": [ - "pattern_matching", - "structs" - ] + "prerequisites": [ + "atoms", + "multiple-clause-functions", + "guards", + "pattern-matching", + "case", + "strings", + "enum", + "structs", + "default-arguments" + ], + "practices": ["pattern-matching", "structs"], + "difficulty": 6 }, { "slug": "list-ops", "name": "List Ops", "uuid": "86658a31-d401-401b-80df-2c4df35f9b15", - "prerequisites": [], - "difficulty": 6, - "topics": [ - "enumeration", + "prerequisites": [ "lists", - "recursion" - ] - }, - { + "recursion", + "tail-call-recursion", + "multiple-clause-functions", + "pattern-matching" + ], + "practices": ["lists", "recursion", "tail-call-recursion"], + "difficulty": 6 + }, + { "slug": "markdown", "name": "Markdown", "uuid": "5dfa24bf-e77c-47c6-88e1-e50cbeecd159", - "prerequisites": [], - "difficulty": 5, - "topics": [ - "refactoring" - ] + "prerequisites": [ + "strings", + "enum", + "recursion", + "regular-expressions", + "multiple-clause-functions", + "pattern-matching", + "cond", + "case", + "if" + ], + "practices": ["strings", "regular-expressions"], + "difficulty": 5 }, { "slug": "bank-account", "name": "Bank Account", "uuid": "5d5e0f6c-f4b7-418e-88f8-4b1d0f99bfb0", - "prerequisites": [], - "difficulty": 7, - "topics": [ - "otp" - ] + "prerequisites": ["if", "processes", "pids", "agent"], + "practices": ["if", "processes", "pids", "agent"], + "difficulty": 7 }, { "slug": "zipper", "name": "Zipper", "uuid": "bc315734-051c-4735-9a8a-3aacb094d2ca", - "prerequisites": [], - "difficulty": 8, - "topics": [ - "algorithms", + "prerequisites": [ "recursion", "structs", - "trees" - ] + "protocols", + "if", + "nil", + "case", + "pattern-matching", + "multiple-clause-functions" + ], + "practices": ["structs", "recursion"], + "difficulty": 8 }, { "slug": "bowling", "name": "Bowling", "uuid": "3b252cc6-cc55-4187-891e-c10aaabac81f", - "prerequisites": [], - "difficulty": 8, - "topics": [ - "algorithms", - "pattern_matching", + "prerequisites": [ + "pattern-matching", + "multiple-clause-functions", + "guards", + "lists", + "enum", + "recursion", + "cond", + "if", + "case", "structs" - ] + ], + "practices": [ + "pattern-matching", + "guards", + "structs", + "multiple-clause-functions" + ], + "difficulty": 8 }, { "slug": "forth", "name": "Forth", "uuid": "2abfa3e5-d358-4a07-91f9-d4ad04eb719d", - "prerequisites": [], - "difficulty": 10, - "topics": [ - "parsers" - ] + "prerequisites": [ + "pattern-matching", + "multiple-clause-functions", + "guards", + "strings", + "regular-expressions", + "maps", + "lists", + "enum", + "recursion", + "cond", + "if", + "case", + "structs", + "errors", + "exceptions", + "dynamic-dispatch" + ], + "practices": ["regular-expressions", "errors", "exceptions"], + "difficulty": 10 }, { "slug": "resistor-color", "name": "Resistor Color", "uuid": "12efd520-e3e5-437f-b93e-38af14aa605d", - "prerequisites": [], - "difficulty": 1, - "topics": [ - "enumerables" - ] + "prerequisites": ["lists", "enum"], + "practices": ["enum"], + "difficulty": 1 }, { "slug": "two-fer", "name": "Two Fer", "uuid": "e7f3280e-0bef-4fac-8a69-cbfa2e5f818a", - "prerequisites": [], - "difficulty": 1, - "topics": [ - "strings" - ] + "prerequisites": ["strings", "guards", "default-arguments"], + "practices": ["strings", "guards", "default-arguments"], + "difficulty": 1 }, { "slug": "nucleotide-count", "name": "Nucleotide Count", "uuid": "7404e885-747a-46fc-be0c-c53f4b0e162f", - "prerequisites": [], - "difficulty": 2, - "topics": [ - "enumerables", - "maps", - "string_processing" - ] + "prerequisites": ["charlists", "maps", "enum"], + "practices": ["charlists", "enum", "maps"], + "difficulty": 2 }, { "slug": "pig-latin", "name": "Pig Latin", "uuid": "3aa45a2b-d3bc-4763-b11d-5d41a1cf505c", - "prerequisites": [], - "difficulty": 2, - "topics": [ - "pattern_matching", - "string_processing" - ] + "prerequisites": [ + "strings", + "regular-expressions", + "enum", + "recursion", + "cond", + "if", + "case", + "binaries" + ], + "practices": ["strings", "binaries"], + "difficulty": 2 }, { "slug": "protein-translation", "name": "Protein Translation", "uuid": "84af7be8-8f90-4990-9d48-b5324a0d4354", - "prerequisites": [], - "difficulty": 2, - "topics": [ - "pattern_matching", - "string_processing" - ] + "prerequisites": [ + "atoms", + "tuples", + "maps", + "enum", + "recursion", + "case", + "pattern-matching", + "strings", + "binaries", + "regular-expressions" + ], + "practices": ["strings", "case", "pattern-matching"], + "difficulty": 2 }, { "slug": "rotational-cipher", "name": "Rotational Cipher", "uuid": "99b344ff-b74c-4af5-9952-7738b493ee7b", - "prerequisites": [], - "difficulty": 2, - "topics": [ - "string_processing" - ] + "prerequisites": [ + "strings", + "charlists", + "ranges", + "enum", + "recursion", + "cond", + "case", + "multiple-clause-functions", + "guards" + ], + "practices": ["charlists", "ranges"], + "difficulty": 2 }, { "slug": "secret-handshake", "name": "Secret Handshake", "uuid": "ea7da409-6bda-4cff-b26e-0909ba36f4f5", - "prerequisites": [], - "difficulty": 2, - "topics": [ - "binary_representation" - ] + "prerequisites": [ + "lists", + "cond", + "if", + "case", + "multiple-clause-functions", + "enum", + "recursion", + "bit-manipulation" + ], + "practices": ["bit-manipulation"], + "difficulty": 2 }, { "slug": "space-age", "name": "Space Age", "uuid": "1d02554e-15f3-46aa-9f14-60b4049f3100", - "prerequisites": [], - "difficulty": 2, - "topics": [ - "pattern_matching" - ] + "prerequisites": [ + "floating-point-numbers", + "atoms", + "multiple-clause-functions", + "pattern-matching", + "maps", + "module-attributes-as-constants" + ], + "practices": [ + "atoms", + "floating-point-numbers", + "module-attributes-as-constants" + ], + "difficulty": 2 }, { "slug": "strain", "name": "Strain", "uuid": "d51edc8a-893b-4b05-912f-759e0d85123b", - "prerequisites": [], - "difficulty": 2, - "topics": [ - "collections" - ] + "prerequisites": [ + "anonymous-functions", + "lists", + "recursion", + "tail-call-recursion", + "cond", + "case", + "if" + ], + "practices": ["lists", "recursion", "anonymous-functions"], + "difficulty": 2 }, { "slug": "accumulate", "name": "Accumulate", "uuid": "e7c6a0d2-6aaf-4d55-99e2-8ffa65a5e8f0", - "prerequisites": [], - "difficulty": 2, - "topics": [ - "recursion", - "reduce" - ] + "prerequisites": ["anonymous-functions", "lists", "recursion"], + "practices": ["anonymous-functions", "lists", "recursion"], + "difficulty": 2 }, { "slug": "acronym", "name": "Acronym", "uuid": "23989815-1b3f-4377-b6bf-ce9536432517", - "prerequisites": [], - "difficulty": 2, - "topics": [ - "string_processing" - ] + "prerequisites": [ + "strings", + "enum", + "regular-expressions", + "pipe-operator" + ], + "practices": ["regular-expressions", "pipe-operator"], + "difficulty": 2 }, { "slug": "raindrops", "name": "Raindrops", "uuid": "4522b139-6f0c-4172-a4fa-6a6adef33a9e", - "prerequisites": [], - "difficulty": 2, - "topics": [ - "conditionals" - ] + "prerequisites": [ + "integers", + "multiple-clause-functions", + "guards", + "if", + "strings", + "maps", + "enum" + ], + "practices": ["enum"], + "difficulty": 2 }, { "slug": "run-length-encoding", "name": "Run Length Encoding", "uuid": "f4f759ea-53e1-42d6-a580-6e7b7d6a99a0", - "prerequisites": [], - "difficulty": 2, - "topics": [ - "algorithms", - "strings" - ] + "prerequisites": ["strings", "regular-expressions", "enum", "if"], + "practices": ["strings", "regular-expressions"], + "difficulty": 2 }, { "slug": "series", "name": "Series", "uuid": "4a084cb7-335d-41f1-8148-5d3abbce8ab0", - "prerequisites": [], - "difficulty": 2, - "topics": [ - "string_processing" - ] + "prerequisites": [ + "multiple-clause-functions", + "guards", + "strings", + "enum", + "pipe-operator" + ], + "practices": ["strings", "enum", "pipe-operator"], + "difficulty": 2 }, { "slug": "dnd-character", "name": "DnD Character", "uuid": "bd15a0e0-c19e-4a52-be6c-1a61d14c54cd", - "prerequisites": [], - "difficulty": 3, - "topics": [ - "random", - "structs" - ] + "prerequisites": [ + "integers", + "enum", + "recursion", + "structs", + "ranges", + "randomness" + ], + "practices": ["structs", "randomness"], + "difficulty": 3 }, { "slug": "pangram", "name": "Pangram", "uuid": "20a0bbf8-751c-477a-a2cb-dd7cf4e4896c", - "prerequisites": [], - "difficulty": 2, - "topics": [ - "enumerations", - "strings" - ] + "prerequisites": [ + "strings", + "charlists", + "enum", + "recursion", + "ranges" + ], + "practices": ["charlists", "ranges"], + "difficulty": 2 }, { "slug": "scrabble-score", "name": "Scrabble Score", "uuid": "cc198564-72e6-444b-93b6-6b7ecf4d1759", - "prerequisites": [], - "difficulty": 2, - "topics": [ - "reduce" - ] + "prerequisites": [ + "strings", + "maps", + "enum", + "recursion", + "pipe-operator" + ], + "practices": ["strings", "enum", "pipe-operator", "maps"], + "difficulty": 2 }, { "slug": "sum-of-multiples", "name": "Sum Of Multiples", "uuid": "5b8eece1-845f-4a5a-8a2f-fe2bf66f5e57", - "prerequisites": [], - "difficulty": 2, - "topics": [ - "algorithms", - "math", - "reduce" - ] + "prerequisites": ["enum", "ranges"], + "practices": ["enum", "ranges"], + "difficulty": 2 }, { "slug": "grade-school", "name": "Grade School", "uuid": "4e6d3ddf-b696-40dc-ba02-ed998e595be7", - "prerequisites": [], - "difficulty": 3, - "topics": [ - "maps" - ] + "prerequisites": ["lists", "maps", "enum"], + "practices": ["maps"], + "difficulty": 3 }, { "slug": "isogram", "name": "Isogram", "uuid": "55a20a0f-0131-4e4e-b14f-f3cb49e3cc04", - "prerequisites": [], - "difficulty": 3, - "topics": [ - "algorithms", - "reduce" - ] + "prerequisites": ["strings", "enum", "regular-expressions"], + "practices": ["enum", "regular-expressions"], + "difficulty": 3 }, { "slug": "twelve-days", "name": "Twelve Days", "uuid": "9dfb5dfc-1123-492b-9383-2a4312c219a4", - "prerequisites": [], - "difficulty": 3, - "topics": [ - "enumerations", - "reduce", - "string_formatting" - ] + "prerequisites": [ + "lists", + "strings", + "multiple-clause-functions", + "case", + "enum", + "recursion", + "maps", + "ranges" + ], + "practices": ["multiple-clause-functions", "strings", "recursion"], + "difficulty": 3 }, { "slug": "collatz-conjecture", "name": "Collatz Conjecture", "uuid": "01f7ce73-ad6a-42bb-a401-cbd485c081d4", - "prerequisites": [], - "difficulty": 2, - "topics": [ - "math", - "recursion" - ] + "prerequisites": [ + "integers", + "recursion", + "multiple-clause-functions", + "guards" + ], + "practices": ["integers", "recursion", "guards"], + "difficulty": 2 }, { "slug": "sublist", "name": "Sublist", "uuid": "146dd0ed-5210-4b3c-bb4b-8d0a8e832aab", - "prerequisites": [], - "difficulty": 2, - "topics": [ - "enumeration", - "lists" - ] + "prerequisites": [ + "lists", + "cond", + "case", + "if", + "multiple-clause-functions", + "pattern-matching", + "recursion" + ], + "practices": ["lists"], + "difficulty": 2 }, { "slug": "triangle", "name": "Triangle", "uuid": "546d92c7-c57b-4cbb-a721-9c393817a193", - "prerequisites": [], - "difficulty": 2, - "topics": [ - "algorithms" - ] + "prerequisites": [ + "atoms", + "tuples", + "multiple-clause-functions", + "pattern-matching", + "guards", + "cond", + "case", + "if" + ], + "practices": ["atoms", "pattern-matching", "guards"], + "difficulty": 2 }, { "slug": "flatten-array", "name": "Flatten Array", "uuid": "0aae3af1-7c35-4d7c-aecf-8f89c7fbc300", - "prerequisites": [], - "difficulty": 3, - "topics": [ + "prerequisites": [ "lists", - "recursion" - ] + "recursion", + "multiple-clause-functions", + "pattern-matching", + "guards", + "nil" + ], + "practices": ["lists", "recursion", "nil"], + "difficulty": 3 }, { "slug": "matching-brackets", "name": "Matching Brackets", "uuid": "cf0084a0-7b1d-4714-b7b2-618e3ad6e147", - "prerequisites": [], - "difficulty": 3, - "topics": [ - "algorithms", - "enumeration", - "reduce" - ] - }, - { + "prerequisites": [ + "strings", + "regular-expressions", + "cond", + "case", + "if", + "recursion", + "enum", + "maps", + "pattern-matching", + "multiple-clause-functions", + "binaries" + ], + "practices": ["strings", "recursion", "pattern-matching"], + "difficulty": 3 + }, + { "slug": "anagram", "name": "Anagram", "uuid": "21e70267-097e-476f-aaff-233483514802", - "prerequisites": [], - "difficulty": 2, - "topics": [ - "enumeration", - "filter" - ] + "prerequisites": ["strings", "enum"], + "practices": ["strings", "enum"], + "difficulty": 2 }, { "slug": "hamming", "name": "Hamming", "uuid": "aca03bcb-eb70-4646-be34-8c1a44026e9b", - "prerequisites": [], - "difficulty": 2, - "topics": [ - "string_processing" - ] + "prerequisites": [ + "atoms", + "tuples", + "charlists", + "multiple-clause-functions", + "guards", + "enum", + "recursion" + ], + "practices": ["enum", "recursion"], + "difficulty": 2 }, { "slug": "matrix", "name": "Matrix", "uuid": "f0df392c-8ace-4639-b555-5e61e54a854e", - "prerequisites": [], - "difficulty": 3, - "topics": [ - "string_processing", - "structs" - ] + "prerequisites": ["strings", "enum", "structs", "tuples", "maps"], + "practices": ["strings", "enum", "structs", "tuples", "maps"], + "difficulty": 3 }, { "slug": "phone-number", @@ -985,76 +958,117 @@ "binaries" ], "practices": ["strings", "regular-expressions"], - "difficulty": 4, - "topics": [ - "pattern_matching", - "string_processing" - ] + "difficulty": 4 }, { "slug": "say", "name": "Say", "uuid": "5ecbe1c9-12e3-42b6-921a-bc2d32011930", - "prerequisites": [], - "difficulty": 3, - "topics": [ - "pattern_matching" - ] + "prerequisites": [ + "integers", + "atoms", + "tuples", + "strings", + "multiple-clause-functions", + "case", + "guards", + "enum", + "recursion", + "maps", + "ranges", + "module-attributes-as-constants" + ], + "practices": ["guards", "maps", "module-attributes-as-constants"], + "difficulty": 3 }, { "slug": "nth-prime", "name": "Nth Prime", "uuid": "6d0c0785-3514-44fc-9b5a-0758989d1c6a", - "prerequisites": [], - "difficulty": 2, - "topics": [ - "algorithms", - "math", - "recursion" - ] + "prerequisites": [ + "integers", + "cond", + "case", + "if", + "enum", + "recursion", + "multiple-clause-functions", + "guards", + "ranges", + "streams", + "errors", + "exceptions" + ], + "practices": ["integers", "recursion", "ranges", "errors"], + "difficulty": 2 }, { "slug": "binary-search", "name": "Binary Search", "uuid": "89204af8-3914-404b-8984-39a8d60362c4", - "prerequisites": [], - "difficulty": 3, - "topics": [ - "algorithms", - "recursion" - ] + "prerequisites": [ + "tuples", + "integers", + "recursion", + "multiple-clause-functions", + "guards", + "cond" + ], + "practices": ["tuples", "recursion", "cond"], + "difficulty": 3 }, { "slug": "isbn-verifier", "name": "ISBN Verifier", "uuid": "0fb09d01-1f8b-4654-9004-52baa057412e", - "prerequisites": [], - "difficulty": 3, - "topics": [ - "string_processing" - ] + "prerequisites": [ + "strings", + "regular-expressions", + "if", + "cond", + "case", + "ranges", + "enum" + ], + "practices": ["strings", "regular-expressions", "ranges"], + "difficulty": 3 }, { "slug": "leap", "name": "Leap", "uuid": "3d0d82d7-fdff-4dd5-b720-7246317bb023", - "prerequisites": [], - "difficulty": 3, - "topics": [ - "algorithms" - ] + "prerequisites": [ + "integers", + "booleans", + "multiple-clause-functions", + "guards" + ], + "practices": [ + "integers", + "booleans", + "multiple-clause-functions", + "guards" + ], + "difficulty": 3 }, { "slug": "tournament", "name": "Tournament", "uuid": "29a6f3f4-0d20-4447-8916-b98270780e0e", - "prerequisites": [], - "difficulty": 4, - "topics": [ - "formatting", - "sorting", - "string_processing" - ] + "prerequisites": [ + "tuples", + "strings", + "maps", + "enum", + "multiple-clause-functions", + "pattern-matching", + "guards", + "cond", + "case", + "if" + ], + "practices": ["maps", "enum", "pattern-matching"], + "difficulty": 4 }, { "slug": "all-your-base", @@ -1062,539 +1076,754 @@ "uuid": "f71d5f38-fcc9-4044-ade9-f779a8686c69", "prerequisites": [ "atoms", - "tuples" + "tuples", + "integers", + "multiple-clause-functions", + "pattern-matching", + "guards", + "cond", + "case", + "if", + "recursion", + "tail-call-recursion", + "enum" + ], + "practices": [ + "integers", + "multiple-clause-functions", + "pattern-matching" ], - "difficulty": 2, - "topics": [ - "math", - "numbers", - "translation" - ] + "difficulty": 2 }, { "slug": "binary-search-tree", "name": "Binary Search Tree", "uuid": "77fe5eb6-a35b-4af4-9512-275f140c25d6", - "prerequisites": [], - "difficulty": 3, - "topics": [ - "algorithms", - "trees" - ] + "prerequisites": [ + "multiple-clause-functions", + "pattern-matching", + "guards", + "cond", + "case", + "if", + "enum", + "maps", + "recursion", + "nil" + ], + "practices": ["maps", "recursion", "nil"], + "difficulty": 3 }, { "slug": "grains", "name": "Grains", "uuid": "b030fa38-8935-4665-98c3-77f8434a6ea1", - "prerequisites": [], - "difficulty": 3, - "topics": [ - "recursion", - "reduce" - ] + "prerequisites": [ + "atoms", + "tuples", + "multiple-clause-functions", + "pattern-matching", + "guards", + "enum", + "ranges", + "erlang-libraries", + "bit-manipulation" + ], + "practices": ["atoms", "tuples", "enum", "ranges"], + "difficulty": 3 }, { "slug": "meetup", "name": "Meetup", "uuid": "68fee2cd-a5bc-40f2-8936-a3bb10463498", "prerequisites": [ + "atoms", + "cond", + "case", + "if", + "multiple-clause-functions", + "pattern-matching", + "guards", + "enum", + "ranges", "dates-and-time" ], - "practices": [ - "dates-and-time" - ], - "difficulty": 4, - "topics": [ - "calendar", - "pattern_matching", - "time" - ] + "practices": ["atoms", "pattern-matching", "dates-and-time"], + "difficulty": 4 }, { "slug": "simple-linked-list", "name": "Simple Linked List", "uuid": "e5d2386a-3021-4329-a4b7-6164e49df776", - "prerequisites": [], - "difficulty": 1, - "topics": [ - "recursion" - ] + "prerequisites": [ + "atoms", + "tuples", + "pattern-matching", + "recursion", + "tail-call-recursion" + ], + "practices": [ + "atoms", + "tuples", + "pattern-matching", + "recursion", + "tail-call-recursion" + ], + "difficulty": 1 }, { "slug": "etl", "name": "ETL", "uuid": "b3a4c561-344a-403e-b5b3-3533d51e65f4", - "prerequisites": [], - "difficulty": 2, - "topics": [ - "enumeration", - "string_processing" - ] + "prerequisites": ["strings", "maps", "enum", "list-comprehensions"], + "practices": ["list-comprehensions"], + "difficulty": 2 }, { "slug": "binary", "name": "Binary", "uuid": "29c3c9ff-c7f3-4646-9612-7cd768d237ab", - "prerequisites": [], - "difficulty": 3, - "topics": [ - "binary_operators", - "math" + "prerequisites": [ + "cond", + "case", + "if", + "multiple-clause-functions", + "pattern-matching", + "binaries", + "recursion", + "tail-call-recursion", + "enum", + "strings" ], + "practices": ["recursion", "tail-call-recursion", "strings"], + "difficulty": 3, "status": "deprecated" }, { "slug": "change", "name": "Change", "uuid": "14bddd31-a68f-4a16-830f-6e8ecf8199f2", - "prerequisites": [], - "difficulty": 3, - "topics": [ - "enumeration", - "reduce" - ] + "prerequisites": [ + "integers", + "atoms", + "tuples", + "multiple-clause-functions", + "pattern-matching", + "guards", + "recursion", + "enum", + "maps" + ], + "practices": ["integers", "enum"], + "difficulty": 7 }, { "slug": "transpose", "name": "Transpose", "uuid": "ce270a34-add1-422c-bb86-53b310f05e27", - "prerequisites": [], - "difficulty": 5, - "topics": [ - "strings", - "transforming" - ] + "prerequisites": ["strings", "enum"], + "practices": ["strings", "enum"], + "difficulty": 5 }, { "slug": "ocr-numbers", "name": "OCR Numbers", "uuid": "3f321191-afb1-4aa1-995b-204aa460269e", - "prerequisites": [], - "difficulty": 6, - "topics": [ - "enumerations", - "strings" - ] + "prerequisites": [ + "strings", + "charlists", + "multiple-clause-functions", + "pattern-matching", + "cond", + "case", + "if", + "enum", + "maps", + "binaries" + ], + "practices": [ + "strings", + "multiple-clause-functions", + "pattern-matching", + "enum" + ], + "difficulty": 6 }, { "slug": "kindergarten-garden", "name": "Kindergarten Garden", "uuid": "ae72ff68-e4c9-472c-8a86-7adaaa9086ee", - "prerequisites": [], - "difficulty": 3, - "topics": [ - "string_processing" - ] + "prerequisites": [ + "tuples", + "lists", + "strings", + "multiple-clause-functions", + "pattern-matching", + "default-arguments", + "recursion", + "enum", + "maps", + "ranges", + "regular-expressions", + "module-attributes-as-constants" + ], + "practices": [ + "strings", + "enum", + "maps", + "module-attributes-as-constants" + ], + "difficulty": 3 }, { "slug": "diamond", "name": "Diamond", "uuid": "89633764-ace4-4ad5-a1aa-22cae7be7d18", - "prerequisites": [], - "difficulty": 5, - "topics": [ - "algorithms", - "enumeration" - ] + "prerequisites": [ + "charlists", + "strings", + "enum", + "recursion", + "ranges" + ], + "practices": ["charlists", "strings", "enum", "ranges"], + "difficulty": 5 }, { "slug": "luhn", "name": "Luhn", "uuid": "c38ca1a8-9f0e-49de-81f9-5712ce459839", - "prerequisites": [], - "difficulty": 5, - "topics": [ - "enumeration", - "string_processing" - ] + "prerequisites": [ + "integers", + "strings", + "regular-expressions", + "cond", + "case", + "if", + "multiple-clause-functions", + "guards", + "pattern-matching", + "recursion", + "enum" + ], + "practices": ["integers", "strings", "enum"], + "difficulty": 5 }, { "slug": "scale-generator", "name": "Scale Generator", "uuid": "94de8b3f-79d7-4367-821c-e239c95e32ca", - "prerequisites": [], - "difficulty": 5, - "topics": [ - "enumerations", - "string_processing" - ] + "prerequisites": [ + "lists", + "strings", + "binaries", + "cond", + "case", + "if", + "multiple-clause-functions", + "guards", + "pattern-matching", + "recursion", + "enum", + "module-attributes-as-constants", + "default-arguments" + ], + "practices": ["lists", "enum", "module-attributes-as-constants"], + "difficulty": 5 }, { "slug": "rail-fence-cipher", "name": "Rail Fence Cipher", "uuid": "3daeb229-0638-443f-9ae2-222ebb88c11a", - "prerequisites": [], - "difficulty": 6, - "topics": [ - "encryption", - "string_processing" - ] + "prerequisites": [ + "strings", + "cond", + "case", + "if", + "multiple-clause-functions", + "guards", + "pattern-matching", + "recursion", + "enum", + "ranges", + "streams" + ], + "practices": ["strings", "enum", "ranges"], + "difficulty": 6 }, { "slug": "gigasecond", "name": "Gigasecond", "uuid": "287331a4-64d5-4b35-b4c1-a1171dc338e1", - "prerequisites": [ - "dates-and-time" - ], - "practices": [ - "dates-and-time" - ], - "difficulty": 3, - "topics": [ - "calendar", - "time" - ] + "prerequisites": ["integers", "dates-and-time"], + "practices": ["dates-and-time"], + "difficulty": 3 }, { "slug": "hexadecimal", "name": "Hexadecimal", "uuid": "8154a099-5d6f-4e71-83fe-45ab23475778", - "prerequisites": [], + "prerequisites": [ + "strings", + "charlists", + "ranges", + "multiple-clause-functions", + "guards", + "pattern-matching", + "case", + "recursion", + "enum" + ], + "practices": ["strings", "charlists", "ranges"], "difficulty": 3, - "topics": [ - "math", - "numbers", - "string_processing" + "status": "deprecated" + }, + { + "slug": "perfect-numbers", + "name": "Perfect Numbers", + "uuid": "cf4816a5-8cee-4a85-8bbb-236c0676123c", + "prerequisites": [ + "atoms", + "tuples", + "cond", + "case", + "multiple-clause-functions", + "pattern-matching", + "guards", + "enum", + "recursion" + ], + "practices": ["atoms", "cond", "pattern-matching", "enum", "recursion"], + "difficulty": 3 + }, + { + "slug": "prime-factors", + "name": "Prime Factors", + "uuid": "47328272-b2f6-42e4-a5a3-a5d276bfbdee", + "prerequisites": [ + "integers", + "case", + "multiple-clause-functions", + "pattern-matching", + "guards", + "recursion", + "tail-call-recursion" + ], + "practices": [ + "multiple-clause-functions", + "pattern-matching", + "recursion", + "tail-call-recursion" ], - "status": "deprecated" - }, - { - "slug": "perfect-numbers", - "name": "Perfect Numbers", - "uuid": "cf4816a5-8cee-4a85-8bbb-236c0676123c", - "prerequisites": [], - "difficulty": 3, - "topics": [ - "enumeration", - "math", - "pattern_matching" - ] - }, - { - "slug": "prime-factors", - "name": "Prime Factors", - "uuid": "47328272-b2f6-42e4-a5a3-a5d276bfbdee", - "prerequisites": [], - "difficulty": 3, - "topics": [ - "math", - "pattern_matching", - "recursion" - ] + "difficulty": 3 }, { "slug": "diffie-hellman", "name": "Diffie Hellman", "uuid": "92caf2b9-3fca-401c-8daa-aaa0193e704f", - "prerequisites": [], - "difficulty": 4, - "topics": [ - "math" - ] + "prerequisites": ["ranges", "randomness", "erlang-libraries"], + "practices": ["ranges", "randomness", "erlang-libraries"], + "difficulty": 4 }, { "slug": "parallel-letter-frequency", "name": "Parallel Letter Frequency", "uuid": "1992eaf7-7fbe-4176-ad46-01e325c27bcb", - "prerequisites": [], - "difficulty": 4, - "topics": [ - "concurrency", - "otp" - ] + "prerequisites": [ + "strings", + "regular-expressions", + "enum", + "processes", + "pids", + "task" + ], + "practices": ["strings", "regular-expressions", "processes", "task"], + "difficulty": 4 }, { "slug": "palindrome-products", "name": "Palindrome Products", "uuid": "5ab8275f-bf1d-472d-9545-8ac622ce6f5d", "prerequisites": [ + "strings", + "enum", + "ranges", + "list-comprehensions", + "default-arguments", "errors", "exceptions" ], - "difficulty": 5, - "topics": [ - "math", - "reduce" - ] + "practices": ["enum", "ranges", "list-comprehensions"], + "difficulty": 5 }, { "slug": "pascals-triangle", "name": "Pascals Triangle", "uuid": "b85c37c7-a76e-41fa-9ce6-abcdba2bd683", - "prerequisites": [], - "difficulty": 3, - "topics": [ - "algorithms", - "enumeration", - "math" - ] + "prerequisites": ["enum", "ranges", "recursion"], + "practices": ["enum", "ranges", "recursion"], + "difficulty": 3 }, { "slug": "spiral-matrix", "name": "Spiral Matrix", "uuid": "cf28d2b2-763e-404b-90b0-637263d3bba6", - "prerequisites": [], - "difficulty": 4, - "topics": [ - "lists", - "transforming" - ] + "prerequisites": ["lists", "enum", "recursion"], + "practices": ["lists", "enum", "recursion"], + "difficulty": 4 }, { "slug": "custom-set", "name": "Custom Set", "uuid": "1219528b-3438-4313-84c5-a9c1bbb6ffd3", - "prerequisites": [], - "difficulty": 5, - "topics": [ - "collections", - "enumeration" - ] + "prerequisites": [ + "lists", + "cond", + "case", + "if", + "multiple-clause-functions", + "pattern-matching", + "guards", + "structs", + "maps", + "enum" + ], + "practices": ["maps"], + "difficulty": 5 }, { "slug": "saddle-points", "name": "Saddle Points", "uuid": "8e5c050a-ff42-4a23-ba32-84595b7476f4", - "prerequisites": [], - "difficulty": 5, - "topics": [ - "enumeration", - "matricies", - "string_processing" - ] + "prerequisites": ["lists", "strings", "enum", "maps"], + "practices": ["enum", "maps"], + "difficulty": 5 }, { "slug": "connect", "name": "Connect", "uuid": "c36fd67a-a370-49b7-b778-9a542e2c5a75", - "prerequisites": [], - "difficulty": 7, - "topics": [ - "reduce", - "string_processing" - ] + "prerequisites": [ + "lists", + "cond", + "case", + "if", + "multiple-clause-functions", + "pattern-matching", + "guards", + "strings", + "enum" + ], + "practices": ["enum"], + "difficulty": 7 }, { "slug": "minesweeper", "name": "Minesweeper", "uuid": "8d665135-31dc-490a-8f6d-51c6654099bd", - "prerequisites": [], - "difficulty": 7, - "topics": [ - "algorithms", - "enumeration", - "reduce" - ] + "prerequisites": [ + "lists", + "charlists", + "cond", + "case", + "if", + "multiple-clause-functions", + "pattern-matching", + "guards", + "strings", + "enum", + "maps", + "ranges" + ], + "practices": ["enum"], + "difficulty": 7 }, { "slug": "queen-attack", "name": "Queen Attack", "uuid": "5bc0d877-ad13-461e-bdbd-cd262b875dbb", - "prerequisites": [], - "difficulty": 7, - "topics": [ - "algorithms", + "prerequisites": [ + "lists", + "cond", + "case", + "if", + "multiple-clause-functions", + "pattern-matching", + "default-arguments", + "guards", + "enum", + "ranges", + "errors", + "exceptions", "structs" - ] + ], + "practices": ["structs", "pattern-matching", "errors", "exceptions"], + "difficulty": 7 }, { "slug": "armstrong-numbers", "name": "Armstrong Numbers", "uuid": "8f40f0f6-95e6-4a4c-a576-3d677ffbbd9f", - "prerequisites": [], - "difficulty": 2, - "topics": [ - "algorithms", - "math" - ] + "prerequisites": ["integers", "lists", "enum", "erlang-libraries"], + "practices": ["integers"], + "difficulty": 2 }, { "slug": "simple-cipher", "name": "Simple Cipher", "uuid": "dbea6e3b-1c0c-471f-9af3-f8fd3cbb957a", "prerequisites": [ + "multiple-clause-functions", + "pattern-matching", + "guards", + "ranges", + "strings", + "charlists", + "binaries", + "enum", + "streams", "randomness", "erlang-libraries" ], - "practices": [ - "randomness" - ], - "difficulty": 3, - "topics": [ - "encryption", - "string_processing" - ] + "practices": ["strings", "charlists", "randomness"], + "difficulty": 3 }, { "slug": "allergies", "name": "Allergies", "uuid": "9a1b599c-3175-4166-9b53-491a2f565db6", - "prerequisites": [], - "difficulty": 4, - "topics": [ - "binary_operators", - "enumeration" - ] + "prerequisites": ["lists", "maps", "enum", "bit-manipulation"], + "practices": ["bit-manipulation", "enum"], + "difficulty": 4 }, { "slug": "crypto-square", "name": "Crypto Square", "uuid": "132981c5-d3cd-426a-8a93-8a72b1cd8564", - "prerequisites": [], - "difficulty": 4, - "topics": [ - "algorithms", - "encryption" - ] + "prerequisites": [ + "integers", + "floating-point-numbers", + "multiple-clause-functions", + "pattern-matching", + "strings", + "regular-expressions", + "enum", + "erlang-libraries" + ], + "practices": ["strings", "enum"], + "difficulty": 4 }, { "slug": "largest-series-product", "name": "Largest Series Product", "uuid": "79525094-76dd-4cf0-8956-fdd33de855e2", - "prerequisites": [], - "difficulty": 4, - "topics": [ - "enumeration", - "math", - "recursion" - ] + "prerequisites": [ + "multiple-clause-functions", + "pattern-matching", + "guards", + "integers", + "strings", + "enum", + "ranges", + "errors", + "exceptions" + ], + "practices": ["integers", "enum"], + "difficulty": 4 }, { "slug": "clock", "name": "Clock", "uuid": "e7cb9cd0-5893-4ebb-b801-f5d548945531", - "prerequisites": [], - "difficulty": 5, - "topics": [ + "prerequisites": [ "integers", - "logic", - "protocols", + "multiple-clause-functions", + "pattern-matching", + "guards", + "if", + "case", + "cond", + "strings", "structs", - "transforming" - ] + "protocols" + ], + "practices": ["integers", "structs", "protocols"], + "difficulty": 5 }, { "slug": "sieve", "name": "Sieve", "uuid": "78cfa21b-bc7f-426b-9ef3-57b8639e887b", - "prerequisites": [], - "difficulty": 5, - "topics": [ - "enumeration", - "math" - ] + "prerequisites": [ + "integers", + "lists", + "multiple-clause-functions", + "pattern-matching", + "guards", + "ranges", + "enum", + "recursion" + ], + "practices": ["lists", "recursion"], + "difficulty": 5 }, { "slug": "poker", "name": "Poker", "uuid": "53d67dde-5a53-4d89-b77c-027d144135b9", - "prerequisites": [], - "difficulty": 7, - "topics": [ - "sorting" - ] + "prerequisites": [ + "tuples", + "lists", + "maps", + "enum", + "recursion", + "multiple-clause-functions", + "pattern-matching", + "guards", + "case", + "cond", + "if", + "structs" + ], + "practices": ["enum", "pattern-matching"], + "difficulty": 8 }, { "slug": "atbash-cipher", "name": "Atbash Cipher", "uuid": "eab8a96f-74af-4e3d-8039-d1d74714f72b", - "prerequisites": [], - "difficulty": 3, - "topics": [ - "encryption" - ] + "prerequisites": [ + "strings", + "charlists", + "regular-expressions", + "ranges", + "maps", + "enum", + "recursion" + ], + "practices": ["strings", "charlists"], + "difficulty": 3 }, { "slug": "grep", "name": "Grep", "uuid": "b2630a58-6ee1-4b3b-ad5c-e09b8bfe2a30", - "prerequisites": [], - "difficulty": 3, - "topics": [ - "enumerations", - "strings" - ] + "prerequisites": [ + "multiple-clause-functions", + "pattern-matching", + "guards", + "case", + "cond", + "if", + "enum", + "strings", + "regular-expressions", + "file" + ], + "practices": ["case", "strings", "regular-expressions", "file"], + "difficulty": 4 }, { "slug": "difference-of-squares", "name": "Difference Of Squares", "uuid": "bb9b24da-1ee6-42fb-936f-5fc41d97ee27", - "prerequisites": [], - "difficulty": 4, - "topics": [ - "math", - "reduce" - ] + "prerequisites": ["integers", "enum", "ranges"], + "practices": ["enum", "ranges"], + "difficulty": 4 }, { "slug": "dominoes", "name": "Dominoes", "uuid": "9fdeb525-90d8-45ca-9a24-ca46b4363e03", - "prerequisites": [], - "difficulty": 4, - "topics": [ - "algorithms", - "enumerations", + "prerequisites": [ + "tuples", + "atoms", + "multiple-clause-functions", + "pattern-matching", + "guards", + "case", + "cond", + "if", + "enum", "recursion", - "sorting", - "trees" - ] + "tail-call-recursion" + ], + "practices": ["recursion", "tail-call-recursion"], + "difficulty": 4 }, { "slug": "alphametics", "name": "Alphametics", "uuid": "7ed99829-acd8-4724-b92f-85146f1709f9", - "prerequisites": [], - "difficulty": 5, - "topics": [ - "algorithms", - "backtracking", - "strings" - ] + "prerequisites": [ + "strings", + "regular-expressions", + "multiple-clause-functions", + "pattern-matching", + "guards", + "case", + "cond", + "if", + "enum", + "charlists", + "ranges" + ], + "practices": ["strings", "enum", "pattern-matching"], + "difficulty": 7 }, { "slug": "pythagorean-triplet", "name": "Pythagorean Triplet", "uuid": "087a2a3b-71e2-4473-ab2f-3be5240567b5", - "prerequisites": [ - "task" - ], - "practices": [ - "task" - ], - "difficulty": 5, - "topics": [ - "algorithms", - "math", - "reduce" - ] + "prerequisites": ["integers", "ranges", "list-comprehensions", "task"], + "practices": ["list-comprehensions", "task"], + "difficulty": 5 }, { "slug": "wordy", "name": "Wordy", "uuid": "087940a2-5372-4ff3-aa9f-ce2eb982d91c", - "prerequisites": [], - "difficulty": 6, - "topics": [ - "parsers" - ] + "prerequisites": [ + "strings", + "regular-expressions", + "multiple-clause-functions", + "pattern-matching", + "guards", + "case", + "cond", + "if", + "enum", + "errors", + "exceptions" + ], + "practices": ["regular-expressions", "pattern-matching"], + "difficulty": 7 }, { "slug": "dot-dsl", "name": "Dot DSL", "uuid": "c316b8ef-7b2d-43d4-b402-f7d28b0cdaa7", - "prerequisites": [], - "difficulty": 8, - "topics": [ - "graphs", - "structs" - ] + "prerequisites": [ + "structs", + "regular-expressions", + "multiple-clause-functions", + "pattern-matching", + "guards", + "case", + "cond", + "if", + "enum", + "errors", + "exceptions", + "keyword-lists", + "nil", + "macros" + ], + "practices": ["keyword-lists", "structs", "macros"], + "difficulty": 8 } ], - "foregone": [ - "robot-name" - ] + "foregone": ["robot-name"] }, "concepts": [ { diff --git a/exercises/practice/zipper/lib/bin_tree.ex b/exercises/practice/zipper/lib/bin_tree.ex index 1366224bbf..e2d681e891 100644 --- a/exercises/practice/zipper/lib/bin_tree.ex +++ b/exercises/practice/zipper/lib/bin_tree.ex @@ -18,7 +18,7 @@ defimpl Inspect, for: BinTree do # A custom inspect instance purely for the tests, this makes error messages # much more readable. # - # BinTree[value: 3, left: BinTree[value: 5, right: BinTree[value: 6]]] becomes (3:(5::(6::)):) + # %BinTree{value: 3, left: %BinTree{value: 5, right: %BinTree{value: 6}}} becomes (3:(5::(6::)):) def inspect(%BinTree{value: value, left: left, right: right}, opts) do concat([ "(",