-
-
Notifications
You must be signed in to change notification settings - Fork 399
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[v3] Add prerequisites to Practice Exercises #583
Changes from 10 commits
9061410
706095b
b34a3d3
a13f68f
400e2e9
ebff913
406c7be
5fbe0c5
e150a6b
13078bc
c3d40c3
9321427
bde18bf
ce15309
99171f2
20457d6
f94c12d
280531a
d656b65
081fa9e
a83f3fb
9812964
2ea69b9
86ae353
578edb0
4b0947f
59b47dd
7e142ba
beb4910
fa937a8
2d4b9a6
1351191
0dc6ff9
1a65ea0
cc15651
8ff82e0
7270573
adde21a
793b51c
9cc9e1b
24f4386
c27d129
b807e89
6f57711
051e3a8
dd709b7
44a3b21
9285aa1
5ab89d8
2fd96b0
8e2deab
8be1208
acf13cd
449cfd4
3bf5109
265e55d
7173260
2bd7592
531cd51
d3154c9
45fb4fa
af2555a
a6f67fe
f634f3f
1c4926b
e5fadf2
2a6c5f5
7432e82
c78f6a9
d050b6f
efdf8a5
1151ba8
9d33b39
1de0f6d
713f51f
45f15bb
7ceca7d
70d08d1
41fd756
3ebe7f3
f9e3129
0605d3b
95524f4
c5186d2
35a70a3
7bddc47
97411c1
2aab62a
52e41ef
42cad00
9e97901
f7d4c1d
883a235
87d3b5d
f282b83
33696af
06ffd87
fe928c6
0c3092c
d148f38
b3a6ea8
41cd680
560965a
0cedbd3
23a73f0
0f0872d
49662b0
6afab11
4402161
110d12c
30f0b77
9da9473
d8e83a5
d1aca4b
03af2b6
e27914a
7ca92ff
53565f8
7883237
501d5e7
6bd38a0
214e36e
4f91cee
8fd781b
018235b
483c76e
cacf196
7b8df24
7036e74
6479543
158531d
090eb72
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -489,7 +489,7 @@ | |
"slug": "hello-world", | ||
"name": "Hello World", | ||
"uuid": "cc96d65d-1c79-40d0-8fd2-9a6665a43b01", | ||
"prerequisites": [], | ||
"prerequisites": ["basics"], | ||
"difficulty": 1, | ||
"topics": [ | ||
"strings" | ||
|
@@ -499,7 +499,13 @@ | |
"slug": "rna-transcription", | ||
"name": "RNA Transcription", | ||
"uuid": "a4629a60-752f-4234-99f1-6b3ac0b4ba18", | ||
"prerequisites": [], | ||
"prerequisites": [ | ||
"charlists", | ||
"pattern-matching", | ||
"multiple-clause-functions", | ||
"case", | ||
"enum" | ||
], | ||
"difficulty": 2, | ||
"topics": [ | ||
"strings" | ||
|
@@ -509,7 +515,12 @@ | |
"slug": "word-count", | ||
"name": "Word Count", | ||
"uuid": "4a24ba2f-ae92-4095-be53-64bc881422ea", | ||
"prerequisites": [], | ||
"prerequisites": [ | ||
"strings", | ||
"regular-expressions", | ||
"enum", | ||
"maps" | ||
], | ||
"difficulty": 2, | ||
"topics": [ | ||
"lists", | ||
|
@@ -521,7 +532,17 @@ | |
"slug": "roman-numerals", | ||
"name": "Roman Numerals", | ||
"uuid": "4c0ece49-5710-43a1-88b3-2fb149de8552", | ||
"prerequisites": [], | ||
"prerequisites": [ | ||
"strings", | ||
"recursion", | ||
"guards", | ||
"default-arguments", | ||
"multiple-clause-functions", | ||
"enum", | ||
"maps", | ||
"cond", | ||
"case" | ||
], | ||
"difficulty": 2, | ||
"topics": [ | ||
"algorithms", | ||
|
@@ -532,7 +553,11 @@ | |
"slug": "bob", | ||
"name": "Bob", | ||
"uuid": "d20b49dc-cb6d-45fc-a168-78d002072c75", | ||
"prerequisites": [], | ||
"prerequisites": [ | ||
"strings", | ||
"regular-expressions", | ||
"cond" | ||
], | ||
"difficulty": 2, | ||
"topics": [ | ||
"control_flow", | ||
|
@@ -543,7 +568,13 @@ | |
"slug": "beer-song", | ||
"name": "Beer Song", | ||
"uuid": "24db624b-7c80-409d-97d5-e1177f025c67", | ||
"prerequisites": [], | ||
"prerequisites": [ | ||
"strings", | ||
"multiple-clause-functions", | ||
"ranges", | ||
"enum", | ||
"recursion" | ||
], | ||
"difficulty": 3, | ||
"topics": [ | ||
"pattern_matching", | ||
|
@@ -554,7 +585,16 @@ | |
"slug": "robot-simulator", | ||
"name": "Robot Simulator", | ||
"uuid": "e5e55560-852f-4551-b4da-c9f4a3141470", | ||
"prerequisites": [], | ||
"prerequisites": [ | ||
"multiple-clause-functions", | ||
"guards", | ||
"pattern-matching", | ||
"case", | ||
"strings", | ||
"enum", | ||
"structs", | ||
"errors" | ||
], | ||
"difficulty": 6, | ||
"topics": [ | ||
"pattern_matching", | ||
|
@@ -565,7 +605,13 @@ | |
"slug": "list-ops", | ||
"name": "List Ops", | ||
"uuid": "86658a31-d401-401b-80df-2c4df35f9b15", | ||
"prerequisites": [], | ||
"prerequisites": [ | ||
"lists", | ||
"recursion", | ||
"tail-call-recursion", | ||
"multiple-clause-functions", | ||
"pattern-matching" | ||
], | ||
"difficulty": 4, | ||
"topics": [ | ||
"enumeration", | ||
|
@@ -577,7 +623,16 @@ | |
"slug": "markdown", | ||
"name": "Markdown", | ||
"uuid": "5dfa24bf-e77c-47c6-88e1-e50cbeecd159", | ||
"prerequisites": [], | ||
"prerequisites": [ | ||
"strings", | ||
"enum", | ||
"recursion", | ||
"regular-expressions", | ||
"multiple-clause-functions", | ||
"pattern-matching", | ||
"cond", | ||
"if" | ||
], | ||
"difficulty": 5, | ||
"topics": [ | ||
"refactoring" | ||
|
@@ -587,7 +642,11 @@ | |
"slug": "bank-account", | ||
"name": "Bank Account", | ||
"uuid": "5d5e0f6c-f4b7-418e-88f8-4b1d0f99bfb0", | ||
"prerequisites": [], | ||
"prerequisites": [ | ||
"processes", | ||
"agent", | ||
"genserver" | ||
], | ||
"difficulty": 7, | ||
"topics": [ | ||
"otp" | ||
|
@@ -597,7 +656,16 @@ | |
"slug": "zipper", | ||
"name": "Zipper", | ||
"uuid": "bc315734-051c-4735-9a8a-3aacb094d2ca", | ||
"prerequisites": [], | ||
"prerequisites": [ | ||
"recursion", | ||
"structs", | ||
"protocols", | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I don't think protocols are necessary to solve this exercise, but the boilerplate code includes a protocol implementation (https://github.com/exercism/elixir/blob/main/exercises/practice/zipper/lib/bin_tree.ex#L15-L33) so I added it here to avoid students being confused by the boilerplate. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think Zipper used to appear after Clock, so they were introduced to protocols by that point. I don't think students that I have encountered have been confused by this at this point with Clock having been removed from the core pathway. |
||
"if", | ||
"nil", | ||
"case", | ||
"pattern-matching", | ||
"multiple-clause-functions" | ||
], | ||
"difficulty": 8, | ||
"topics": [ | ||
"algorithms", | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I am adding "errors" as a prerequisite to each exercise that uses the
{:ok, any} | {:error, any} | :error
pattern. I'm not entirely sure if that's a good idea because the "errors" concept is very far down the concept tree. Maybe it would be better to assume that tuples and atoms are enough? What do you think?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I could go either way on this. If there aren't enough exercises earlier on, we could leave that out an let tuples be enough. If there are, we could leave it and wait to name the pattern before the exercise appears.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We have very few exercises early on. I think I'm going to use this concept as a way of steering people into easier exercises. So for easy ones, like
triangle
, I'm going to removeerrors
as a prerequisite so that people can do it early. They are unlikely to overcomplicate those by trying to raise and rescue :). But for complicated ones, likeforth
orrobot-simulator
, I'll keeperrors
as a prerequisite, "for the student's own good".