We need to choose at most 20 exercises to be core exercises (set core: true, and delete the unlocked_by key) since PR #704 has been merged.
For each exercise that is not core we need to decide which exercise is the prerequisite (max 1).
We should also leave 3 or 4 simple exercises as (core: false, unlocked_by: null), as this will provide new participants with some exercises that they can tackle even if they have not finished the first core exercise.
I propose that this should occur after #523 is completed, so that we can use the topic data to ensure the core exercises cover all the core concepts.
Makes sense :)
In light of https://github.com/exercism/discussions/issues/175, we should go ahead and pick core exercises now, and shuffle later.
I think the core exercises should consist of easy exercises that introduce a core topic such as arrays or generics.
Agreed!
Here are a few of the most obvious candidates, I think:
hello-worldtwo-fergigasecond (dates)secret-handshake (binary)flatten-array (recursion?)binary-search (generics, needs some TLC though)Feel free to agree/disagree/suggest more!
Posting for reference: https://github.com/exercism/discussions/issues/175
They all seem like sensible suggestions :) A few more suggestions:
simple-cipher (Random)linked-list (or simple-linked-list, whichever one is actually simpler :P)difference-of-squares (Math)secret-handshake (enum and also has first use of list I think)matrix (arrays)hamming (exceptions)triangle (class which extends exception)word-count (map)Nice research!
Also
saddle-points (set)And possibly scrabble-score since it has the first use of Parameterized tests?
And
bank-account (concurrency)Also, after having looked at it more closely, simple-cipher has difficulty 8 which is probably too high for a core exercise. So a better suggestion might be:
robot-name (Random)rotational-cipher (string manipulation)All in all, that would give us 17 core exercises:
hello-world (diffictulty 1)two-fer (difficulty 1)hamming (exceptions, difficulty 3)gigasecond (dates, difficulty 3)scrabble-score (paramaterized, difficulty 3)difference-of-squares (Math, difficulty 3)secret-handshake (binary, enum, list, difficulty 3)matrix (arrays, difficulty 4)triangle (custom exceptions, difficulty 4)rotational-cipher (string manipulation, difficulty 4)saddle-points (set, difficulty 4)flatten-array (recursion, difficulty 5)word-count (map, difficulty 5)robot-name (Random, difficulty 5)linked-list (list, data structures, difficulty 6)binary-search (generics, difficulty 6)bank-account (concurrency, difficulty 6)Does that seem like an okay list?
And as always available we could have
rna-transcription (difficulty 2)pangram (difficulty 3)space-age (difficulty 3)acronym (difficulty 3)I think that looks great! One thing to remember is that for some exercises, the listed topics assume a certain implementation (e.g. difference-of-squares can be solved without Math), but I think that detail will be more important if/once we actually add topics.
That's true. You'd still have to do some number manipulation in some way to solve difference-of-squares so I still feel that it covers an important topic :)
I'm working on a suggestion for the prerequisites of exericises, will post it here when I've gone through all of them :)
Here is my suggestion for the prerequisites of exercises. exercise-name - second-exercise-name means I think exercise-name should be a prerequisite of second-exercise-name. I've included the difficulty of each exercise and a few notes on what they're about (from what I can remember/see from looking through them) so that you can hopefully see why I've grouped exercises together. Feel free to disagree with anything or ask if any (or all) of it doesn't make sense :)
I've made some assumptions, for example that always available exercises can unlock other exercises. And that it's okay for some exercise unlock a chain of exercises whereas others don't unlock anything. And that each exercise should unlock at most one other exercise (any more than that became too complicated for my diagram and for my brain :P). So feel free to disagree with any of those assumptions! :)
always available:
rna-transcription - pig-latin (4, string manipulation)
pangram - isogram (4, string manipulation) - anagram (7, string manipulation)
space-age
acronym
core:
hello-world (1)
two-fer (string, 1) - raindrops (3, string manipulation) - twelve-days (4, string manipulation) - diamond (4, string manipulation) - bob (string manipulation, 5) - food-chain (string manipulation, 6) - beer-song (string manipulation, 6)
hamming (string -> number, exception, 3) - luhn (4, string and integer manipulation) - largest-series-product (4, string and integer manipulation) - phone-number (5, string and integer manipulation) - nucleotide-count (string -> numbers, 5) - series (string and integer manipulation, 5) - roman-numerals (string and integer manipulation, 6) - ocr-numbers (string and integer manipulation, 8) - rectangles (string manipulation, 8)
gigasecond (dates, 3) - meetup (dates, enum, 7)
scrabble-score (string -> number, game, paramaterized, 3) - queen-attack (enum, logic, game, 6) - minesweeper (string manipulation, game, 6) - bowling (integer manipulation, game, 6) - word-search (string manipulation, game, 7) - poker (string manipulation, game, 7)
difference-of-squares (Math, 3) - perfect-numbers (3, integer manipulation) - sum-of-multiples (4, integer manipulation) - sieve (4, integer manipulation) - all-your-base (integer manipulation, 6) - clock (integer manipulation, 7) - palindrome-products (map, integer manipulation, 8)
secret-handshake (binary, enum, list, 3) - allergies (enum, list, integer manipulation) - robot-simulator (enum, logic, 6) - wordy (logic, string manipulation) - forth (logic, string manipulation, 9)
matrix (array, string and integer manipulation, 4) - kindergarten-garden (array, string manipulation, 4) - pascals-triangle (array, integer manipulation, 5) - spiral-matrix (array, string manipulation, 6) - transpose (arrays, string manipulation, 6)
triangle (exception, number (double) manipulation, 4) - collatz-conjecture (integer manipulation, recursion, 4) - nth-prime (integer manipulation, 4) - prime-factors (5, number (long) manipulation) - complex-numbers (number (double) manipulation, data structure, 8) - pythagorean-triplet (integer and double manipulation, 8)
rotational-cipher (string manipulation, difficulty 4) - run-length-encoding (string manipulation, 5) - atbash-cipher (string manipulation, 5) - crypto-square (string manipulation, 7) - simple-cipher (string manipulation, Random, 8)
saddle-points (set, integer manipulation, 4)
flatten-array (recursion, list, 5) - bracket-push (stack, string manipulation, 5) - book-store (dynamic programming, recursion, list, 8) - change (dynamic programming, recursion, 8)
word-count (map, string manipulation, 5) - etl (map, string manipulation, 6) - grade-school (map, data structure, 6)
robot-name (Random, format string, 5)
linked-list (list, generics, data structures, 6) - sublist (list, enum, 7) - simple-linked-list (list, generics, 7) - circular-buffer (queue, data structure, 8) - list-ops (list, generics, 8) - custom-set (set, data structure, 10)
binary-search (generics, comparable, 6) - binary-search-tree (generics, comparable, 7)
bank-account (concurrency, data structure, 6)
Sorry about the wall of text! I'm still not sure if leaving in my difficulty and topics notes has made it more or less easy to understand... Feel free to let me know if you want me to post it with just the exercise names :) I could maybe even have a go at making a diagram if you really want me to but I can't promise anything about the quality :P
Even though I didn't have a chance to finish all of the exercises (meaning that I can't evaluate their difficulty) I've composed a table for visibility (based on @FridaTveit `s comment above)
Diagram will definitely help, but it takes considerable amount of time to create one
| Exercise name | Difficulty | Features |
| --- | :---: | --- |
| ######### | # | ############# |
| hello-world | 1 | Introduction |
| two-fer | 1 | strings |
| raindrops | 3 | string manipulation |
| twelve-days | 4 | string manipulation |
| diamond | 4 | string manipulation |
| bob | 5 | string manipulation |
| food-chain | 6 | string manipulation |
| beer-song | 6 | string manipulation |
| ######### | # | ############# |
| hamming | 3 | string -> number, exceptions |
| luhn | 4 | string and integer manipulation |
| largest-series-product | 4 | string and integer manipulation |
| phone-number | 5 | string and integer manipulation |
| nucleotide-count | 5 | number conversion |
| series | 5 | string and integer manipulation |
| roman-numerals | 6 | string and integer manipulation |
| ocr-numbers | 8 | string and integer manipulation |
| rectangles | 8 | string manipulation |
| ######### | # | ############# |
| gigasecond | 3 | Dates |
| meetup | 7 | Dates, enum |
| ######### | # | ############# |
| scrabble-score | 3 | string -> number, game, paramaterized |
| queen-attack | 6 | enum, logic, game |
| minesweeper | 6 | string manipulation, game |
| bowling | 6 | integer manipulation, game |
| word-search | 7 | string manipulation, game |
| poker | 7 | string manipulation, game |
| ######### | # | ############# |
| difference-of-squares | 3 | Math |
| perfect-numbers | 3 | integer manipulation |
| sum-of-multiples | 4 | integer manipulation |
| sieve | 4 | integer manipulation |
| all-your-base | 6 | integer manipulation |
| clock | 7 | integer manipulation |
| palindrome-products | 8 | map, integer manipulation |
| ######### | # | ############# |
| secret-handshake | 3 | binary, enum, list |
| allergies | ? | enum, list, integer manipulation |
| robot-simulator | 6 | enum, logic |
| wordy | ? | logic, string manipulation |
| forth | 9 | logic, string manipulation |
| ######### | # | ############# |
| matrix | 4 | array, string and integer manipulation |
| kindergarten-garden | 4 | array, string manipulation |
| pascals-triangle | 5 | array, integer manipulation |
| spiral-matrix | 6 | array, string manipulation |
| transpose | 6 | arrays, string manipulation |
| ######### | # | ############# |
| triangle | 4 | exception, double manipulation |
| collatz-conjecture | 4 | integer manipulation, recursion|
| nth-prime | 4 | integer manipulation |
| prime-factors | 5 | long manipulation |
| complex-numbers | 8 | double manipulation, data structure |
| pythagorean-triplet | 8 | integer and double manipulation |
| ######### | # | ############# |
| rotational-cipher | 4 | string manipulation |
| run-length-encoding | 5 | string manipulation |
| atbash-cipher | 5 | string manipulation |
| crypto-square | 7 | string manipulation |
| simple-cipher | 8 | string manipulation, Random |
| ######### | # | ############# |
| saddle-points | 4 | set, integer manipulation |
| ######### | # | ############# |
| flatten-array | 5 | recursion, list |
| bracket-push | 5 | stack, string manipulation |
| book-store | 8 | dynamic programming, recursion, list |
| change | 8 | dynamic programming, recursion |
| ######### | # | ############# |
| word-count | 5 | map, string manipulation |
| etl | 6 | map, string manipulation |
| grade-school | 6 | map, data structure |
| ######### | # | ############# |
| robot-name | 5 | Random, format string |
| ######### | # | ############# |
| linked-list | 6 | list, generics, data structures |
| sublist | 7 | list, enum |
| simple-linked-list | 7 | list, generics |
| circular-buffer | 8 | queue, data structure |
| list-ops | 8 | list, generics |
| custom-set | 10 | set, data structure |
| ######### | # | ############# |
| binary-search | 6 | generics, comparable |
| binary-search-tree | 7 | generics, comparable |
| ######### | # | ############# |
| bank-account | 6 | concurrency, data structure |
@FridaTveit thanks for putting in all that work! I like your suggestions :) Let's implement!
@m-a-ge I believe the configlet tool is being updated to print a tree-like representation of the track, which will help with visualization shortly :)
@stkent great, will do! :) @Smarticles101 do you agree? :)
Thank you for making the table @m-a-ge, that's very useful! :)
@FridaTveit I think it looks great!
Great! I'll try to implement it then :)