diff --git a/config.json b/config.json index 9600ef898..5defaf665 100644 --- a/config.json +++ b/config.json @@ -19,11 +19,21 @@ "average_run_time": 8 }, "files": { - "solution": ["%{pascal_slug}.fs"], - "test": ["%{pascal_slug}Tests.fs"], - "example": [".meta/Example.fs"], - "exemplar": [".meta/Exemplar.fs"], - "invalidator": ["%{pascal_slug}.fsproj"] + "solution": [ + "%{pascal_slug}.fs" + ], + "test": [ + "%{pascal_slug}Tests.fs" + ], + "example": [ + ".meta/Example.fs" + ], + "exemplar": [ + ".meta/Exemplar.fs" + ], + "invalidator": [ + "%{pascal_slug}.fsproj" + ] }, "exercises": { "concept": [ @@ -31,92 +41,154 @@ "slug": "bird-watcher", "name": "Bird Watcher", "uuid": "280e8400-1a46-4ef5-b48d-b24611aaace2", - "concepts": ["arrays"], - "prerequisites": ["booleans", "pattern-matching"] + "concepts": [ + "arrays" + ], + "prerequisites": [ + "booleans", + "pattern-matching" + ] }, { "slug": "lucians-luscious-lasagna", "name": "Lucian's Luscious Lasagna", "uuid": "b439e87d-6acf-40bd-848f-fb7c77dad229", - "concepts": ["basics"], + "concepts": [ + "basics" + ], "prerequisites": [] }, { "slug": "annalyns-infiltration", "name": "Annalyn's Infiltration", "uuid": "6ef2a45b-1994-4fb8-b064-637e37881848", - "concepts": ["booleans"], - "prerequisites": ["basics"] + "concepts": [ + "booleans" + ], + "prerequisites": [ + "basics" + ] }, { "slug": "booking-up-for-beauty", "name": "Booking up for Beauty", "uuid": "04379e4b-05b0-40cd-992f-705b2494d645", - "concepts": ["datetimes"], - "prerequisites": ["numbers", "strings"] + "concepts": [ + "datetimes" + ], + "prerequisites": [ + "numbers", + "strings" + ] }, { "slug": "valentines-day", "name": "Valentine's Day", "uuid": "d5305eb9-f87f-44db-a4a4-9e0b5069afe0", - "concepts": ["discriminated-unions"], - "prerequisites": ["basics"] + "concepts": [ + "discriminated-unions" + ], + "prerequisites": [ + "basics" + ] }, { "slug": "interest-is-interesting", "name": "Interest is Interesting", "uuid": "fd82bfe4-8725-486b-bc46-1639a83ae158", - "concepts": ["floating-point-numbers"], - "prerequisites": ["if-then-else-expressions", "numbers"] + "concepts": [ + "floating-point-numbers" + ], + "prerequisites": [ + "if-then-else-expressions", + "numbers" + ] }, { "slug": "tracks-on-tracks-on-tracks", "name": "Tracks on Tracks on Tracks", "uuid": "51f626a6-8e84-4dba-9c9f-b7830000fbe8", - "concepts": ["lists"], - "prerequisites": ["booleans", "strings", "pattern-matching"] + "concepts": [ + "lists" + ], + "prerequisites": [ + "booleans", + "strings", + "pattern-matching" + ] }, { "slug": "cars-assemble", "name": "Cars, Assemble!", "uuid": "85c32aba-5dc0-4dba-9226-63939f3db882", - "concepts": ["if-then-else-expressions", "numbers"], - "prerequisites": ["booleans"] + "concepts": [ + "if-then-else-expressions", + "numbers" + ], + "prerequisites": [ + "booleans" + ] }, { "slug": "guessing-game", "name": "Guessing game", "uuid": "d605385d-fd8a-45fa-a320-4d7c40213769", - "concepts": ["pattern-matching"], - "prerequisites": ["if-then-else-expressions", "strings"] + "concepts": [ + "pattern-matching" + ], + "prerequisites": [ + "if-then-else-expressions", + "strings" + ] }, { "slug": "bandwagoner", "name": "Bandwagoner", "uuid": "08ae8519-9dc9-47fe-82ad-8081fe642fe2", - "concepts": ["records"], - "prerequisites": ["booleans", "numbers", "pattern-matching", "strings"] + "concepts": [ + "records" + ], + "prerequisites": [ + "booleans", + "numbers", + "pattern-matching", + "strings" + ] }, { "slug": "pizza-pricing", "name": "Pizza Pricing", "uuid": "33a9ea6f-b8c8-4b8e-85c2-45fec1684ea6", - "concepts": ["recursion"], - "prerequisites": ["discriminated-unions", "pattern-matching"] + "concepts": [ + "recursion" + ], + "prerequisites": [ + "discriminated-unions", + "pattern-matching" + ] }, { "slug": "log-levels", "name": "Log Levels", "uuid": "ab0e683f-46e8-4679-99d2-def4c337e4b8", - "concepts": ["strings"], - "prerequisites": ["basics"] + "concepts": [ + "strings" + ], + "prerequisites": [ + "basics" + ] }, { "slug": "tisbury-treasure-hunt", "name": "Tisbury Treasure Hunt", "uuid": "2d397532-9c6c-473d-8af7-d14333e92a60", - "concepts": ["tuples"], - "prerequisites": ["pattern-matching", "strings"] + "concepts": [ + "tuples" + ], + "prerequisites": [ + "pattern-matching", + "strings" + ] } ], "practice": [ @@ -132,16 +204,27 @@ "slug": "two-fer", "name": "Two Fer", "uuid": "2ee3cc7a-db3f-4668-9983-ed6d0fea95d1", - "practices": ["string-formatting", "strings"], - "prerequisites": ["options", "strings"], + "practices": [ + "string-formatting", + "strings" + ], + "prerequisites": [ + "options", + "strings" + ], "difficulty": 1 }, { "slug": "leap", "name": "Leap", "uuid": "66d974b5-18fc-4993-b5f2-7beda4f4afa3", - "practices": ["numbers"], - "prerequisites": ["if-then-else-expressions", "numbers"], + "practices": [ + "numbers" + ], + "prerequisites": [ + "if-then-else-expressions", + "numbers" + ], "difficulty": 1 }, { @@ -149,7 +232,11 @@ "name": "Queen Attack", "uuid": "528a0023-8687-4524-8318-516d1e432d0d", "practices": [], - "prerequisites": ["if-then-else-expressions", "numbers", "tuples"], + "prerequisites": [ + "if-then-else-expressions", + "numbers", + "tuples" + ], "difficulty": 3 }, { @@ -157,7 +244,11 @@ "name": "Raindrops", "uuid": "0c953a84-e726-4b9f-a964-1950ac2f95f2", "practices": [], - "prerequisites": ["if-then-else-expressions", "numbers", "strings"], + "prerequisites": [ + "if-then-else-expressions", + "numbers", + "strings" + ], "difficulty": 2 }, { @@ -181,7 +272,10 @@ "slug": "space-age", "name": "Space Age", "uuid": "277d05db-0ba0-4de6-b5f8-090c251afffc", - "practices": ["discriminated-unions", "floating-point-numbers"], + "practices": [ + "discriminated-unions", + "floating-point-numbers" + ], "prerequisites": [ "discriminated-unions", "floating-point-numbers", @@ -193,31 +287,53 @@ "slug": "grade-school", "name": "Grade School", "uuid": "cf058dc8-db6f-4034-ac5b-22f1d8d0decc", - "practices": ["ordering"], - "prerequisites": ["lists", "numbers", "ordering", "strings", "tuples"], + "practices": [ + "ordering" + ], + "prerequisites": [ + "lists", + "numbers", + "ordering", + "strings", + "tuples" + ], "difficulty": 2 }, { "slug": "clock", "name": "Clock", "uuid": "30c3a38e-1e44-4711-887e-fca301c26c1b", - "practices": ["equality", "numbers"], - "prerequisites": ["equality", "numbers"], + "practices": [ + "equality", + "numbers" + ], + "prerequisites": [ + "equality", + "numbers" + ], "difficulty": 3 }, { "slug": "bob", "name": "Bob", "uuid": "b3c4d578-10c8-47bc-b0ae-149ed8da530a", - "practices": ["strings"], - "prerequisites": ["if-then-else-expressions", "strings"], + "practices": [ + "strings" + ], + "prerequisites": [ + "if-then-else-expressions", + "strings" + ], "difficulty": 1 }, { "slug": "beer-song", "name": "Beer Song", "uuid": "0ea0d92f-5510-4ba9-b419-3f5ad029b74f", - "practices": ["ranges", "string-formatting"], + "practices": [ + "ranges", + "string-formatting" + ], "prerequisites": [ "lists", "numbers", @@ -231,15 +347,24 @@ "slug": "kindergarten-garden", "name": "Kindergarten Garden", "uuid": "cf64cddf-63e2-4c71-ac15-0af617f82856", - "practices": ["discriminated-unions"], - "prerequisites": ["chars", "discriminated-unions", "strings"], + "practices": [ + "discriminated-unions" + ], + "prerequisites": [ + "chars", + "discriminated-unions", + "strings" + ], "difficulty": 3 }, { "slug": "robot-simulator", "name": "Robot Simulator", "uuid": "ecae4faa-c516-4a71-8d55-9c53403d8826", - "practices": ["discriminated-unions", "strings"], + "practices": [ + "discriminated-unions", + "strings" + ], "prerequisites": [ "chars", "discriminated-unions", @@ -285,15 +410,21 @@ "slug": "pig-latin", "name": "Pig Latin", "uuid": "a002e3db-8e9c-4cbf-b00f-f2090bae5d5a", - "practices": ["regular-expressions"], - "prerequisites": ["strings"], + "practices": [ + "regular-expressions" + ], + "prerequisites": [ + "strings" + ], "difficulty": 6 }, { "slug": "hamming", "name": "Hamming", "uuid": "1dadf8c0-b15c-413f-987e-187d043910f0", - "practices": ["collection-processing"], + "practices": [ + "collection-processing" + ], "prerequisites": [ "for-loops", "if-then-else-expressions", @@ -307,23 +438,40 @@ "slug": "pangram", "name": "Pangram", "uuid": "dc133087-0548-49b4-8f17-0c26cf53bcdf", - "practices": ["sets", "strings"], - "prerequisites": ["booleans", "chars", "strings"], + "practices": [ + "sets", + "strings" + ], + "prerequisites": [ + "booleans", + "chars", + "strings" + ], "difficulty": 2 }, { "slug": "isogram", "name": "Isogram", "uuid": "61404a27-62c3-43dc-93b7-7e4547e0a0d9", - "practices": ["sets", "strings"], - "prerequisites": ["booleans", "chars", "strings"], + "practices": [ + "sets", + "strings" + ], + "prerequisites": [ + "booleans", + "chars", + "strings" + ], "difficulty": 3 }, { "slug": "twelve-days", "name": "Twelve Days", "uuid": "89cd6eb1-9671-42bd-a619-59013fb721b0", - "practices": ["ranges", "string-formatting"], + "practices": [ + "ranges", + "string-formatting" + ], "prerequisites": [ "for-loops", "lists", @@ -338,23 +486,41 @@ "slug": "phone-number", "name": "Phone Number", "uuid": "929f98e4-a16c-464b-ac6c-59ca86dbd2b6", - "practices": ["regular-expressions", "result"], - "prerequisites": ["result", "strings"], + "practices": [ + "regular-expressions", + "result" + ], + "prerequisites": [ + "result", + "strings" + ], "difficulty": 5 }, { "slug": "high-scores", "name": "High Scores", "uuid": "c67d7118-2388-4421-baa1-cc3e4f0e2867", - "practices": ["collection-processing", "ordering"], - "prerequisites": ["constructors", "lists", "numbers", "ordering"], + "practices": [ + "collection-processing", + "ordering" + ], + "prerequisites": [ + "constructors", + "lists", + "numbers", + "ordering" + ], "difficulty": 2 }, { "slug": "bank-account", "name": "Bank Account", "uuid": "cb629d30-0351-4023-bd51-423267164c24", - "practices": ["concurrency", "floating-point-numbers", "members"], + "practices": [ + "concurrency", + "floating-point-numbers", + "members" + ], "prerequisites": [ "classes", "floating-point-numbers", @@ -368,7 +534,10 @@ "slug": "binary-search-tree", "name": "Binary Search Tree", "uuid": "4e786e56-2658-445f-ac91-64dd9c38dbb3", - "practices": ["constructors", "members"], + "practices": [ + "constructors", + "members" + ], "prerequisites": [ "classes", "constructors", @@ -383,7 +552,11 @@ "slug": "pov", "name": "POV", "uuid": "a6082751-98ca-45dc-aeed-cdd19a8da0ca", - "practices": ["equality", "generic-types", "recursion"], + "practices": [ + "equality", + "generic-types", + "recursion" + ], "prerequisites": [ "equality", "generic-types", @@ -398,23 +571,41 @@ "slug": "zipper", "name": "Zipper", "uuid": "5369eea9-00c8-4044-b272-1ce8d0590ecf", - "practices": ["equality", "immutability", "recursion"], - "prerequisites": ["equality", "numbers", "options", "records"], + "practices": [ + "equality", + "immutability", + "recursion" + ], + "prerequisites": [ + "equality", + "numbers", + "options", + "records" + ], "difficulty": 10 }, { "slug": "darts", "name": "Darts", "uuid": "fb3b73e1-673b-4907-821c-f85a157f53c1", - "practices": ["floating-point-numbers"], - "prerequisites": ["floating-point-numbers", "if-then-else-expressions"], + "practices": [ + "floating-point-numbers" + ], + "prerequisites": [ + "floating-point-numbers", + "if-then-else-expressions" + ], "difficulty": 2 }, { "slug": "grains", "name": "Grains", "uuid": "e3751098-5a15-4350-bf5d-507583de3386", - "practices": ["integral-numbers", "math-operators", "result"], + "practices": [ + "integral-numbers", + "math-operators", + "result" + ], "prerequisites": [ "for-loops", "if-then-else-expressions", @@ -428,7 +619,10 @@ "slug": "all-your-base", "name": "All Your Base", "uuid": "01e394ee-23d5-44e6-a37e-149ffaf5375e", - "practices": ["math-operators", "while-loops"], + "practices": [ + "math-operators", + "while-loops" + ], "prerequisites": [ "lists", "math-operators", @@ -442,7 +636,10 @@ "slug": "largest-series-product", "name": "Largest Series Product", "uuid": "b3643992-583b-4e7a-a970-94bc7ae6739a", - "practices": ["integral-numbers", "math-operators"], + "practices": [ + "integral-numbers", + "math-operators" + ], "prerequisites": [ "chars", "for-loops", @@ -477,8 +674,14 @@ "slug": "nth-prime", "name": "Nth Prime", "uuid": "220cbe7e-e781-4ab9-84ec-2b89a3c97670", - "practices": ["lazy-evaluation", "yield"], - "prerequisites": ["numbers", "options"], + "practices": [ + "lazy-evaluation", + "yield" + ], + "prerequisites": [ + "numbers", + "options" + ], "difficulty": 6 }, { @@ -507,7 +710,11 @@ "slug": "diffie-hellman", "name": "Diffie-Hellman", "uuid": "2a7e3e78-ab94-40f3-8f16-1d5aa84c2f85", - "practices": ["big-integers", "math-operators", "randomness"], + "practices": [ + "big-integers", + "math-operators", + "randomness" + ], "prerequisites": [ "big-integers", "lists", @@ -520,7 +727,12 @@ "slug": "custom-set", "name": "Custom Set", "uuid": "ecee74aa-41f5-42aa-b99e-31e9589378e3", - "practices": ["constructors", "generic-types", "immutability", "sets"], + "practices": [ + "constructors", + "generic-types", + "immutability", + "sets" + ], "prerequisites": [ "booleans", "constructors", @@ -537,7 +749,9 @@ "slug": "run-length-encoding", "name": "Run-Length Encoding", "uuid": "0a10cd0b-ea37-4c78-a6a4-223203ac1c37", - "practices": ["strings"], + "practices": [ + "strings" + ], "prerequisites": [ "booleans", "for-loops", @@ -550,7 +764,10 @@ "slug": "palindrome-products", "name": "Palindrome Products", "uuid": "471c89f9-8b27-4898-8e98-58e4b2921616", - "practices": ["exceptions", "generic-methods"], + "practices": [ + "exceptions", + "generic-methods" + ], "prerequisites": [ "exceptions", "generic-methods", @@ -565,7 +782,10 @@ "slug": "word-search", "name": "Word Search", "uuid": "8f8a79d1-78ed-4cdd-adcc-5cd6c6781dcd", - "practices": ["constructors", "nullability"], + "practices": [ + "constructors", + "nullability" + ], "prerequisites": [ "constructors", "lists", @@ -581,8 +801,15 @@ "slug": "dominoes", "name": "Dominoes", "uuid": "f09d34d3-f12c-4c9a-9083-68172478278e", - "practices": ["lazy-evaluation"], - "prerequisites": ["booleans", "lists", "numbers", "tuples"], + "practices": [ + "lazy-evaluation" + ], + "prerequisites": [ + "booleans", + "lists", + "numbers", + "tuples" + ], "difficulty": 7 }, { @@ -590,7 +817,9 @@ "name": "Sieve", "uuid": "a6511471-bc2c-4734-92fe-c6c5cf447efd", "practices": [], - "prerequisites": ["numbers"], + "prerequisites": [ + "numbers" + ], "difficulty": 3 }, { @@ -617,7 +846,10 @@ "slug": "robot-name", "name": "Robot Name", "uuid": "3fbd466a-caf4-48ac-9a1e-796bc406ff1e", - "practices": ["classes", "randomness"], + "practices": [ + "classes", + "randomness" + ], "prerequisites": [ "classes", "randomness", @@ -631,7 +863,9 @@ "slug": "food-chain", "name": "Food Chain", "uuid": "f4dee9ea-fcdf-4623-8ae1-13bdf995f2cb", - "practices": ["string-formatting"], + "practices": [ + "string-formatting" + ], "prerequisites": [ "for-loops", "if-then-else-expressions", @@ -666,7 +900,10 @@ "slug": "ledger", "name": "Ledger", "uuid": "e860ad86-cd1f-474b-9e8e-d8a72ff4315c", - "practices": ["globalization", "string-formatting"], + "practices": [ + "globalization", + "string-formatting" + ], "prerequisites": [ "globalization", "lists", @@ -698,15 +935,24 @@ "slug": "pascals-triangle", "name": "Pascal's Triangle", "uuid": "fef76c19-db3c-442d-b2f5-b0dfae19ee43", - "practices": ["yield"], - "prerequisites": ["for-loops", "lists", "numbers"], + "practices": [ + "yield" + ], + "prerequisites": [ + "for-loops", + "lists", + "numbers" + ], "difficulty": 4 }, { "slug": "book-store", "name": "Book Store", "uuid": "3741977a-adff-47bb-a9c5-c2e444805bac", - "practices": ["floating-point-numbers", "recursion"], + "practices": [ + "floating-point-numbers", + "recursion" + ], "prerequisites": [ "floating-point-numbers", "for-loops", @@ -719,7 +965,11 @@ "slug": "roman-numerals", "name": "Roman Numerals", "uuid": "2e88193d-9f80-4d83-901b-bb5ac4b0804c", - "practices": ["extension-methods", "numbers", "while-loops"], + "practices": [ + "extension-methods", + "numbers", + "while-loops" + ], "prerequisites": [ "extension-methods", "numbers", @@ -732,23 +982,39 @@ "slug": "change", "name": "Change", "uuid": "03a1c773-5c48-4f70-a2de-b742197fa9d2", - "practices": ["collection-processing"], - "prerequisites": ["lists", "numbers", "options"], + "practices": [ + "collection-processing" + ], + "prerequisites": [ + "lists", + "numbers", + "options" + ], "difficulty": 7 }, { "slug": "armstrong-numbers", "name": "Armstrong Numbers", "uuid": "e7f74f6c-16ea-40d8-94f7-7034bc6ee938", - "practices": ["casting"], - "prerequisites": ["booleans", "casting", "numbers"], + "practices": [ + "casting" + ], + "prerequisites": [ + "booleans", + "casting", + "numbers" + ], "difficulty": 2 }, { "slug": "collatz-conjecture", "name": "Collatz Conjecture", "uuid": "8b66e691-508f-40d9-8cee-1d6aec27366e", - "practices": ["numbers", "recursion", "while-loops"], + "practices": [ + "numbers", + "recursion", + "while-loops" + ], "prerequisites": [ "if-then-else-expressions", "numbers", @@ -761,8 +1027,15 @@ "slug": "binary-search", "name": "Binary Search", "uuid": "c5b38251-14ba-4d98-a420-7a930f06167f", - "practices": ["arrays"], - "prerequisites": ["arrays", "for-loops", "numbers", "options"], + "practices": [ + "arrays" + ], + "prerequisites": [ + "arrays", + "for-loops", + "numbers", + "options" + ], "difficulty": 3 }, { @@ -792,23 +1065,37 @@ "slug": "perfect-numbers", "name": "Perfect Numbers", "uuid": "45fcf742-1b3a-422a-b476-5ee81d80057a", - "practices": ["numbers"], - "prerequisites": ["discriminated-unions", "numbers", "options"], + "practices": [ + "numbers" + ], + "prerequisites": [ + "discriminated-unions", + "numbers", + "options" + ], "difficulty": 3 }, { "slug": "protein-translation", "name": "Protein Translation", "uuid": "612395a5-238e-4be0-8ce0-4ac66f57056e", - "practices": ["collection-processing", "while-loops"], - "prerequisites": ["strings", "while-loops"], + "practices": [ + "collection-processing", + "while-loops" + ], + "prerequisites": [ + "strings", + "while-loops" + ], "difficulty": 3 }, { "slug": "triangle", "name": "Triangle", "uuid": "47fd8f98-20d3-43fe-825f-27745e13908d", - "practices": ["floating-point-numbers"], + "practices": [ + "floating-point-numbers" + ], "prerequisites": [ "booleans", "floating-point-numbers", @@ -820,7 +1107,9 @@ "slug": "saddle-points", "name": "Saddle Points", "uuid": "526fc5b4-e96b-419a-8987-9b78e9bddc19", - "practices": ["multi-dimensional-arrays"], + "practices": [ + "multi-dimensional-arrays" + ], "prerequisites": [ "generic-methods", "lists", @@ -834,31 +1123,54 @@ "slug": "simple-linked-list", "name": "Simple Linked List", "uuid": "e86e88a0-802c-41f4-b2a1-c7a81b8e87de", - "practices": ["interfaces", "members"], - "prerequisites": ["interfaces", "lists", "members", "numbers"], + "practices": [ + "interfaces", + "members" + ], + "prerequisites": [ + "interfaces", + "lists", + "members", + "numbers" + ], "difficulty": 4 }, { "slug": "linked-list", "name": "Linked List", "uuid": "253f040d-35c2-4e1c-8651-d7a7410d7d0d", - "practices": ["generic-types"], - "prerequisites": ["classes", "generic-types", "numbers", "records"], + "practices": [ + "generic-types" + ], + "prerequisites": [ + "classes", + "generic-types", + "numbers", + "records" + ], "difficulty": 5 }, { "slug": "yacht", "name": "Yacht", "uuid": "005721ef-264e-4f81-ae63-ae72b0e5310f", - "practices": ["collection-processing", "discriminated-unions"], - "prerequisites": ["discriminated-unions", "numbers"], + "practices": [ + "collection-processing", + "discriminated-unions" + ], + "prerequisites": [ + "discriminated-unions", + "numbers" + ], "difficulty": 5 }, { "slug": "poker", "name": "Poker", "uuid": "411b93d0-214d-4d46-9081-16b9dd376174", - "practices": ["ordering"], + "practices": [ + "ordering" + ], "prerequisites": [ "generic-methods", "if-then-else-expressions", @@ -871,8 +1183,16 @@ "slug": "etl", "name": "ETL", "uuid": "95e592a8-6663-4b07-894a-86a5cc310c67", - "practices": ["collection-processing"], - "prerequisites": ["lists", "maps", "numbers", "strings", "tuples"], + "practices": [ + "collection-processing" + ], + "prerequisites": [ + "lists", + "maps", + "numbers", + "strings", + "tuples" + ], "difficulty": 2 }, { @@ -896,8 +1216,16 @@ "slug": "word-count", "name": "Word Count", "uuid": "0c7a2f06-1e53-4043-9e1a-386e90e945b4", - "practices": ["regular-expressions"], - "prerequisites": ["lists", "maps", "numbers", "strings", "tuples"], + "practices": [ + "regular-expressions" + ], + "prerequisites": [ + "lists", + "maps", + "numbers", + "strings", + "tuples" + ], "difficulty": 4 }, { @@ -905,30 +1233,48 @@ "name": "Scrabble Score", "uuid": "e22fcca5-b23c-4feb-972f-9795dd1bd946", "practices": [], - "prerequisites": ["numbers", "strings"], + "prerequisites": [ + "numbers", + "strings" + ], "difficulty": 3 }, { "slug": "meetup", "name": "Meetup", "uuid": "3ce04665-95d1-4608-9763-5ee1b5f2584c", - "practices": ["datetimes"], - "prerequisites": ["datetimes", "tuples"], + "practices": [ + "datetimes" + ], + "prerequisites": [ + "datetimes", + "tuples" + ], "difficulty": 4 }, { "slug": "dot-dsl", "name": "DOT DSL", "uuid": "dc50364b-b5b6-4e0b-ba58-32fb7d60a93b", - "practices": ["classes", "equality"], - "prerequisites": ["classes", "equality", "lists", "tuples"], + "practices": [ + "classes", + "equality" + ], + "prerequisites": [ + "classes", + "equality", + "lists", + "tuples" + ], "difficulty": 5 }, { "slug": "parallel-letter-frequency", "name": "Parallel Letter Frequency", "uuid": "c0d0ae0f-83fb-433a-8778-d38e8a6645aa", - "practices": ["parallellism"], + "practices": [ + "parallellism" + ], "prerequisites": [ "lists", "maps", @@ -943,7 +1289,9 @@ "slug": "rest-api", "name": "REST API", "uuid": "b0aaf5ac-f94d-4995-af4a-b27068cf540e", - "practices": ["optional-parameters"], + "practices": [ + "optional-parameters" + ], "prerequisites": [ "constructors", "lists", @@ -957,7 +1305,10 @@ "slug": "bowling", "name": "Bowling", "uuid": "1c8ad2ca-4aec-47af-94b1-ef7e2830b463", - "practices": ["classes", "nullability"], + "practices": [ + "classes", + "nullability" + ], "prerequisites": [ "classes", "lists", @@ -965,14 +1316,20 @@ "numbers", "options" ], - "difficulty": 6 - }, - { - "slug": "affine-cipher", - "name": "Affine Cipher", - "uuid": "ae2f8b66-1d5f-4c19-ad84-b9a7e9e87d0e", - "practices": ["exceptions"], - "prerequisites": ["exceptions", "numbers", "strings"], + "difficulty": 6 + }, + { + "slug": "affine-cipher", + "name": "Affine Cipher", + "uuid": "ae2f8b66-1d5f-4c19-ad84-b9a7e9e87d0e", + "practices": [ + "exceptions" + ], + "prerequisites": [ + "exceptions", + "numbers", + "strings" + ], "difficulty": 3 }, { @@ -980,46 +1337,79 @@ "name": "Proverb", "uuid": "5ca0e0ba-20ac-4d48-b2dc-0cdde06a8f3e", "practices": [], - "prerequisites": ["for-loops", "lists", "strings"], + "prerequisites": [ + "for-loops", + "lists", + "strings" + ], "difficulty": 3 }, { "slug": "acronym", "name": "Acronym", "uuid": "926f9309-e0bb-457a-8f1d-8fa947ed5ce7", - "practices": ["regular-expressions", "strings"], - "prerequisites": ["booleans", "chars", "strings"], + "practices": [ + "regular-expressions", + "strings" + ], + "prerequisites": [ + "booleans", + "chars", + "strings" + ], "difficulty": 4 }, { "slug": "anagram", "name": "Anagram", "uuid": "cffcb076-295f-497f-8ef1-059a8fa65536", - "practices": ["classes", "strings"], - "prerequisites": ["classes", "strings"], + "practices": [ + "classes", + "strings" + ], + "prerequisites": [ + "classes", + "strings" + ], "difficulty": 4 }, { "slug": "house", "name": "House", "uuid": "7d339c98-74ea-49d5-a97c-c0417e28468a", - "practices": ["string-formatting"], - "prerequisites": ["lists", "numbers", "string-formatting", "strings"], + "practices": [ + "string-formatting" + ], + "prerequisites": [ + "lists", + "numbers", + "string-formatting", + "strings" + ], "difficulty": 4 }, { "slug": "isbn-verifier", "name": "ISBN Verifier", "uuid": "c339c32c-3310-4b8c-b4e6-0f9f651064b7", - "practices": ["regular-expressions"], - "prerequisites": ["booleans", "chars", "strings"], + "practices": [ + "regular-expressions" + ], + "prerequisites": [ + "booleans", + "chars", + "strings" + ], "difficulty": 4 }, { "slug": "series", "name": "Series", "uuid": "4b07842c-dcef-4be0-a842-0b3b7a30c499", - "practices": ["for-loops", "yield"], + "practices": [ + "for-loops", + "yield" + ], "prerequisites": [ "collection-processing", "for-loops", @@ -1034,15 +1424,24 @@ "name": "Atbash Cipher", "uuid": "3fb37bef-a754-4a64-8493-ba4254518017", "practices": [], - "prerequisites": ["chars", "for-loops", "strings"], + "prerequisites": [ + "chars", + "for-loops", + "strings" + ], "difficulty": 5 }, { "slug": "crypto-square", "name": "Crypto Square", "uuid": "8d381a54-04a1-45d3-84d3-933b0d94f440", - "practices": ["collection-processing"], - "prerequisites": ["collection-processing", "strings"], + "practices": [ + "collection-processing" + ], + "prerequisites": [ + "collection-processing", + "strings" + ], "difficulty": 5 }, { @@ -1050,22 +1449,37 @@ "name": "Luhn", "uuid": "85ab318f-7842-486d-88de-f0ff7fbef069", "practices": [], - "prerequisites": ["chars", "for-loops", "numbers", "strings"], + "prerequisites": [ + "chars", + "for-loops", + "numbers", + "strings" + ], "difficulty": 5 }, { "slug": "rotational-cipher", "name": "Rotational Cipher", "uuid": "26b00c8d-6282-48a8-b017-2ed3e6d48267", - "practices": ["strings"], - "prerequisites": ["chars", "numbers", "strings"], + "practices": [ + "strings" + ], + "prerequisites": [ + "chars", + "numbers", + "strings" + ], "difficulty": 5 }, { "slug": "simple-cipher", "name": "Simple Cipher", "uuid": "df6f311b-9deb-4d07-9a29-3d881556513e", - "practices": ["classes", "members", "randomness"], + "practices": [ + "classes", + "members", + "randomness" + ], "prerequisites": [ "classes", "for-loops", @@ -1080,7 +1494,10 @@ "slug": "tournament", "name": "Tournament", "uuid": "b5672a0c-aac5-4274-a458-39d018b74750", - "practices": ["streams", "string-formatting"], + "practices": [ + "streams", + "string-formatting" + ], "prerequisites": [ "lists", "records", @@ -1094,7 +1511,10 @@ "slug": "diamond", "name": "Diamond", "uuid": "736a470f-412c-41fc-b92d-9bd59ef3bcce", - "practices": ["string-builder", "string-formatting"], + "practices": [ + "string-builder", + "string-formatting" + ], "prerequisites": [ "chars", "lists", @@ -1108,15 +1528,24 @@ "slug": "matrix", "name": "Matrix", "uuid": "632417fa-7bf7-4228-9b71-dbdd6738b223", - "practices": ["classes", "members"], - "prerequisites": ["classes", "members", "numbers"], + "practices": [ + "classes", + "members" + ], + "prerequisites": [ + "classes", + "members", + "numbers" + ], "difficulty": 4 }, { "slug": "markdown", "name": "Markdown", "uuid": "0688eb10-9581-45c0-a69a-13f20d534cb0", - "practices": ["string-builder"], + "practices": [ + "string-builder" + ], "prerequisites": [ "if-then-else-expressions", "string-formatting", @@ -1129,14 +1558,20 @@ "name": "Scale Generator", "uuid": "02a8e767-7449-48a9-8d6b-f2cac708de50", "practices": [], - "prerequisites": ["for-loops", "strings"], + "prerequisites": [ + "for-loops", + "strings" + ], "difficulty": 5 }, { "slug": "spiral-matrix", "name": "Spiral Matrix", "uuid": "52f8f299-b93b-4f44-bd5b-b445741b285d", - "practices": ["multi-dimensional-arrays", "numbers"], + "practices": [ + "multi-dimensional-arrays", + "numbers" + ], "prerequisites": [ "if-then-else-expressions", "lists", @@ -1149,15 +1584,25 @@ "slug": "matching-brackets", "name": "Matching Brackets", "uuid": "677ca063-70fe-4cfc-8112-c5d78bd1ea44", - "practices": ["stacks"], - "prerequisites": ["booleans", "chars", "lists", "stacks", "strings"], + "practices": [ + "stacks" + ], + "prerequisites": [ + "booleans", + "chars", + "lists", + "stacks", + "strings" + ], "difficulty": 7 }, { "slug": "minesweeper", "name": "Minesweeper", "uuid": "9e3fc78d-ac3b-4195-ad4c-9f99b0ee2678", - "practices": ["string-formatting"], + "practices": [ + "string-formatting" + ], "prerequisites": [ "chars", "if-then-else-expressions", @@ -1172,7 +1617,9 @@ "slug": "rectangles", "name": "Rectangles", "uuid": "d3f364e0-9866-4ec4-8197-dc248b96042b", - "practices": ["switch-statements"], + "practices": [ + "switch-statements" + ], "prerequisites": [ "for-loops", "if-then-else-expressions", @@ -1186,31 +1633,54 @@ "slug": "wordy", "name": "Wordy", "uuid": "c721b3f2-4afc-4a30-bad5-77bd002c2819", - "practices": ["regular-expressions", "switch-statements"], - "prerequisites": ["numbers", "options", "strings"], + "practices": [ + "regular-expressions", + "switch-statements" + ], + "prerequisites": [ + "numbers", + "options", + "strings" + ], "difficulty": 7 }, { "slug": "prime-factors", "name": "Prime Factors", "uuid": "18652e46-6dd2-4030-84af-be0965c92991", - "practices": ["integral-numbers", "while-loops"], - "prerequisites": ["integral-numbers", "while-loops"], + "practices": [ + "integral-numbers", + "while-loops" + ], + "prerequisites": [ + "integral-numbers", + "while-loops" + ], "difficulty": 4 }, { "slug": "pythagorean-triplet", "name": "Pythagorean Triplet", "uuid": "6bcde851-71ad-4985-b335-8ca67f99c22f", - "practices": ["generic-methods"], - "prerequisites": ["generic-methods", "numbers", "tuples"], + "practices": [ + "generic-methods" + ], + "prerequisites": [ + "generic-methods", + "numbers", + "tuples" + ], "difficulty": 4 }, { "slug": "circular-buffer", "name": "Circular Buffer", "uuid": "b62f8574-9bac-4b95-a76c-f13789ae2663", - "practices": ["exceptions", "generic-types", "queues"], + "practices": [ + "exceptions", + "generic-types", + "queues" + ], "prerequisites": [ "classes", "exceptions", @@ -1226,7 +1696,10 @@ "slug": "say", "name": "Say", "uuid": "7af901ca-24ea-4c24-a660-99b1f4338e01", - "practices": ["integral-numbers", "while-loops"], + "practices": [ + "integral-numbers", + "while-loops" + ], "prerequisites": [ "if-then-else-expressions", "integral-numbers", @@ -1240,7 +1713,10 @@ "slug": "two-bucket", "name": "Two Bucket", "uuid": "78472676-26f0-4bef-813b-9b958c4c35df", - "practices": ["constructors", "members"], + "practices": [ + "constructors", + "members" + ], "prerequisites": [ "constructors", "discriminated-unions", @@ -1254,23 +1730,37 @@ "slug": "zebra-puzzle", "name": "Zebra Puzzle", "uuid": "ee021156-5520-4386-8b5d-9c648f30287c", - "practices": ["discriminated-unions", "lazy-evaluation"], - "prerequisites": ["discriminated-unions", "records"], + "practices": [ + "discriminated-unions", + "lazy-evaluation" + ], + "prerequisites": [ + "discriminated-unions", + "records" + ], "difficulty": 8 }, { "slug": "secret-handshake", "name": "Secret Handshake", "uuid": "ae78a960-2c55-44cb-9fd0-49b4bd5729c5", - "practices": ["bit-manipulation"], - "prerequisites": ["bit-manipulation", "strings"], + "practices": [ + "bit-manipulation" + ], + "prerequisites": [ + "bit-manipulation", + "strings" + ], "difficulty": 3 }, { "slug": "variable-length-quantity", "name": "Variable Length Quantity", "uuid": "ef86703b-9e78-43f8-aa4c-203492ac622c", - "practices": ["bit-manipulation", "integral-numbers"], + "practices": [ + "bit-manipulation", + "integral-numbers" + ], "prerequisites": [ "bit-manipulation", "integral-numbers", @@ -1283,7 +1773,10 @@ "slug": "connect", "name": "Connect", "uuid": "dead8124-6942-4205-9ea8-3cb926c0dc47", - "practices": ["discriminated-unions", "switch-statements"], + "practices": [ + "discriminated-unions", + "switch-statements" + ], "prerequisites": [ "chars", "discriminated-unions", @@ -1298,7 +1791,9 @@ "slug": "alphametics", "name": "Alphametics", "uuid": "3d682945-5fa1-4121-9d5b-7bac60660de9", - "practices": ["lazy-evaluation"], + "practices": [ + "lazy-evaluation" + ], "prerequisites": [ "lazy-evaluation", "lists", @@ -1329,7 +1824,10 @@ "slug": "sgf-parsing", "name": "SGF Parsing", "uuid": "fe0e98b3-d0d3-4bf6-bfaa-8aa0e61aa625", - "practices": ["constructors", "members"], + "practices": [ + "constructors", + "members" + ], "prerequisites": [ "constructors", "lists", @@ -1345,16 +1843,29 @@ "slug": "forth", "name": "Forth", "uuid": "533981a1-632c-4ca8-a4ae-05f3ad1a810b", - "practices": ["lazy-evaluation"], - "prerequisites": ["lists", "options", "records", "strings"], + "practices": [ + "lazy-evaluation" + ], + "prerequisites": [ + "lists", + "options", + "records", + "strings" + ], "difficulty": 10 }, { "slug": "rail-fence-cipher", "name": "Rail Fence Cipher", "uuid": "c418bba8-2185-4b45-92f1-0cfafbbe8ce5", - "practices": ["collection-processing"], - "prerequisites": ["collection-processing", "numbers", "strings"], + "practices": [ + "collection-processing" + ], + "prerequisites": [ + "collection-processing", + "numbers", + "strings" + ], "difficulty": 6 }, { @@ -1362,7 +1873,11 @@ "name": "Transpose", "uuid": "3dfedd37-8159-446d-a332-e9d356f484ca", "practices": [], - "prerequisites": ["for-loops", "lists", "strings"], + "prerequisites": [ + "for-loops", + "lists", + "strings" + ], "difficulty": 6 }, { @@ -1388,7 +1903,12 @@ "slug": "hangman", "name": "Hangman", "uuid": "ab0f1b66-011f-4aa3-89c5-c89427121279", - "practices": ["immutability", "inheritance", "members", "sets"], + "practices": [ + "immutability", + "inheritance", + "members", + "sets" + ], "prerequisites": [ "chars", "constructors", @@ -1408,14 +1928,18 @@ "name": "Lens Person", "uuid": "443fdb8c-1a97-4086-be6a-b541faa961a5", "practices": [], - "prerequisites": ["tuples"], + "prerequisites": [ + "tuples" + ], "difficulty": 9 }, { "slug": "react", "name": "React", "uuid": "8eef5619-f331-46b3-a2c1-d581f523a815", - "practices": ["events"], + "practices": [ + "events" + ], "prerequisites": [ "classes", "events", @@ -1466,39 +1990,63 @@ "slug": "difference-of-squares", "name": "Difference of Squares", "uuid": "3969fb29-5997-4050-adb0-8c6e95f48013", - "practices": ["collection-processing", "math-operators", "numbers"], - "prerequisites": ["math-operators", "numbers"], + "practices": [ + "collection-processing", + "math-operators", + "numbers" + ], + "prerequisites": [ + "math-operators", + "numbers" + ], "difficulty": 1 }, { "slug": "gigasecond", "name": "Gigasecond", "uuid": "1d377268-8892-460b-a84b-011fde1ff06b", - "practices": ["datetimes"], - "prerequisites": ["datetimes", "numbers"], + "practices": [ + "datetimes" + ], + "prerequisites": [ + "datetimes", + "numbers" + ], "difficulty": 1 }, { "slug": "reverse-string", "name": "Reverse String", "uuid": "08be451e-65c1-4306-860e-ac0c4a02a546", - "practices": ["strings"], - "prerequisites": ["for-loops", "strings"], + "practices": [ + "strings" + ], + "prerequisites": [ + "for-loops", + "strings" + ], "difficulty": 1 }, { "slug": "rna-transcription", "name": "RNA Transcription", "uuid": "3a015501-58bf-427c-8c4c-2197321f4a34", - "practices": ["collection-processing"], - "prerequisites": ["chars", "strings"], + "practices": [ + "collection-processing" + ], + "prerequisites": [ + "chars", + "strings" + ], "difficulty": 1 }, { "slug": "sum-of-multiples", "name": "Sum of Multiples", "uuid": "e702b75e-4c9e-40ef-bcb1-674a87222c23", - "practices": ["ranges"], + "practices": [ + "ranges" + ], "prerequisites": [ "for-loops", "booleans", @@ -1512,7 +2060,9 @@ "slug": "dnd-character", "name": "D&D Character", "uuid": "93550ca5-cd8c-42e3-88f3-e6ce41608342", - "practices": ["randomness"], + "practices": [ + "randomness" + ], "prerequisites": [ "classes", "constructors", @@ -1527,7 +2077,10 @@ "slug": "tree-building", "name": "Tree Building", "uuid": "a53fa908-f983-4da5-b1c1-3989bd2ea2f9", - "practices": ["discriminated-unions", "exceptions"], + "practices": [ + "discriminated-unions", + "exceptions" + ], "prerequisites": [ "booleans", "discriminated-unions", @@ -1631,51 +2184,51 @@ ], "key_features": [ { - "icon": "expressive", "title": "Expressive", - "content": "F# code is very expressive, requiring little code for great results" + "content": "F# code is very expressive, requiring little code for great results", + "icon": "expressive" }, { - "icon": "fun", "title": "Fun", - "content": "F#'s powerful type system is a joy to work with" + "content": "F#'s powerful type system is a joy to work with", + "icon": "fun" }, { - "icon": "safe", "title": "Safe", - "content": "F#'s type system helps catch errors at compile-time. No more null-reference exceptions!" + "content": "F#'s type system helps catch errors at compile-time. No more null-reference exceptions!", + "icon": "safe" }, { - "icon": "functional", "title": "Functional first", - "content": "F# is primarily a functional language, but also has great object-oriented support" + "content": "F# is primarily a functional language, but also has great object-oriented support", + "icon": "functional" }, { - "icon": "interop", "title": "Interop", - "content": "As a member of the .NET ecosystem, F# enjoys full, two-way compatibility with C# code/libraries" + "content": "As a member of the .NET ecosystem, F# enjoys full, two-way compatibility with C# code/libraries", + "icon": "interop" }, { - "icon": "tooling", "title": "Tooling", - "content": "F# has excellent tooling, with linting and refactoring options built-in" + "content": "F# has excellent tooling, with linting and refactoring options built-in", + "icon": "tooling" } ], "tags": [ - "paradigm/functional", + "execution_mode/compiled", "paradigm/declarative", + "paradigm/functional", "paradigm/imperative", "paradigm/object_oriented", - "typing/static", - "typing/strong", - "execution_mode/compiled", - "platform/windows", - "platform/mac", - "platform/linux", - "platform/ios", "platform/android", + "platform/ios", + "platform/linux", + "platform/mac", "platform/web", + "platform/windows", "runtime/clr", + "typing/static", + "typing/strong", "used_for/artificial_intelligence", "used_for/backends", "used_for/cross_platform_development",