Skip to content

Commit ffee89f

Browse files
authored
Implement kindergarten-garden (#728)
1 parent f70e137 commit ffee89f

File tree

10 files changed

+342
-0
lines changed

10 files changed

+342
-0
lines changed

config.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -703,6 +703,14 @@
703703
"practices": [],
704704
"prerequisites": [],
705705
"difficulty": 1
706+
},
707+
{
708+
"slug": "kindergarten-garden",
709+
"name": "Kindergarten Garden",
710+
"uuid": "95372c5c-9b8d-4b53-b743-d99c16e7ae07",
711+
"practices": [],
712+
"prerequisites": [],
713+
"difficulty": 1
706714
}
707715
]
708716
},
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
# Instructions
2+
3+
Your task is to, given a diagram, determine which plants each child in the kindergarten class is responsible for.
4+
5+
There are 12 children in the class:
6+
7+
- Alice, Bob, Charlie, David, Eve, Fred, Ginny, Harriet, Ileana, Joseph, Kincaid, and Larry.
8+
9+
Four different types of seeds are planted:
10+
11+
| Plant | Diagram encoding |
12+
| ------ | ---------------- |
13+
| Grass | G |
14+
| Clover | C |
15+
| Radish | R |
16+
| Violet | V |
17+
18+
Each child gets four cups, two on each row:
19+
20+
```text
21+
[window][window][window]
22+
........................ # each dot represents a cup
23+
........................
24+
```
25+
26+
Their teacher assigns cups to the children alphabetically by their names, which means that Alice comes first and Larry comes last.
27+
28+
Here is an example diagram representing Alice's plants:
29+
30+
```text
31+
[window][window][window]
32+
VR......................
33+
RG......................
34+
```
35+
36+
In the first row, nearest the windows, she has a violet and a radish.
37+
In the second row she has a radish and some grass.
38+
39+
Your program will be given the plants from left-to-right starting with the row nearest the windows.
40+
From this, it should be able to determine which plants belong to each student.
41+
42+
For example, if it's told that the garden looks like so:
43+
44+
```text
45+
[window][window][window]
46+
VRCGVVRVCGGCCGVRGCVCGCGV
47+
VRCCCGCRRGVCGCRVVCVGCGCV
48+
```
49+
50+
Then if asked for Alice's plants, it should provide:
51+
52+
- Violets, radishes, violets, radishes
53+
54+
While asking for Bob's plants would yield:
55+
56+
- Clover, grass, clover, clover
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Introduction
2+
3+
The kindergarten class is learning about growing plants.
4+
The teacher thought it would be a good idea to give the class seeds to plant and grow in the dirt.
5+
To this end, the children have put little cups along the window sills and planted one type of plant in each cup.
6+
The children got to pick their favorites from four available types of seeds: grass, clover, radishes, and violets.
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{
2+
"authors": [
3+
"m-dango"
4+
],
5+
"files": {
6+
"solution": [
7+
"lib/KindergartenGarden.rakumod"
8+
],
9+
"test": [
10+
"t/kindergarten-garden.rakutest"
11+
],
12+
"example": [
13+
".meta/solutions/lib/KindergartenGarden.rakumod"
14+
]
15+
},
16+
"blurb": "Given a diagram, determine which plants each child in the kindergarten class is responsible for.",
17+
"source": "Exercise by the JumpstartLab team for students at The Turing School of Software and Design.",
18+
"source_url": "https://turing.edu"
19+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
unit module KindergartenGarden;
2+
3+
constant %PLANTS =
4+
:C<clover>,
5+
:G<grass>,
6+
:R<radishes>,
7+
:V<violets>,
8+
;
9+
10+
sub plants (:$diagram, :$student) is export {
11+
return %PLANTS{
12+
$diagram
13+
.lines
14+
.map(*.substr((ord($student) - ord('A')) * 2, 2).comb.Slip)
15+
};
16+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../../../t/kindergarten-garden.rakutest
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
properties:
2+
plants:
3+
test: |-
4+
sprintf(q:to/END/, (|(%case<input><diagram student>:p), %case<expected>.List, %case<description>).map(*.raku));
5+
cmp-ok(
6+
plants( %s, %s ),
7+
"~~",
8+
%s,
9+
%s,
10+
);
11+
END
12+
13+
unit: module
14+
example: |-
15+
constant %PLANTS =
16+
:C<clover>,
17+
:G<grass>,
18+
:R<radishes>,
19+
:V<violets>,
20+
;
21+
22+
sub plants (:$diagram, :$student) is export {
23+
return %PLANTS{
24+
$diagram
25+
.lines
26+
.map(*.substr((ord($student) - ord('A')) * 2, 2).comb.Slip)
27+
};
28+
}
29+
30+
stub: |-
31+
constant %PLANTS =
32+
:C<clover>,
33+
:G<grass>,
34+
:R<radishes>,
35+
:V<violets>,
36+
;
37+
38+
sub plants (:$diagram, :$student) is export {
39+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
# This is an auto-generated file.
2+
#
3+
# Regenerating this file via `configlet sync` will:
4+
# - Recreate every `description` key/value pair
5+
# - Recreate every `reimplements` key/value pair, where they exist in problem-specifications
6+
# - Remove any `include = true` key/value pair (an omitted `include` key implies inclusion)
7+
# - Preserve any other key/value pair
8+
#
9+
# As user-added comments (using the # character) will be removed when this file
10+
# is regenerated, comments can be added via a `comment` key.
11+
12+
[1fc316ed-17ab-4fba-88ef-3ae78296b692]
13+
description = "partial garden -> garden with single student"
14+
15+
[acd19dc1-2200-4317-bc2a-08f021276b40]
16+
description = "partial garden -> different garden with single student"
17+
18+
[c376fcc8-349c-446c-94b0-903947315757]
19+
description = "partial garden -> garden with two students"
20+
21+
[2d620f45-9617-4924-9d27-751c80d17db9]
22+
description = "partial garden -> multiple students for the same garden with three students -> second student's garden"
23+
24+
[57712331-4896-4364-89f8-576421d69c44]
25+
description = "partial garden -> multiple students for the same garden with three students -> third student's garden"
26+
27+
[149b4290-58e1-40f2-8ae4-8b87c46e765b]
28+
description = "full garden -> for Alice, first student's garden"
29+
30+
[ba25dbbc-10bd-4a37-b18e-f89ecd098a5e]
31+
description = "full garden -> for Bob, second student's garden"
32+
33+
[566b621b-f18e-4c5f-873e-be30544b838c]
34+
description = "full garden -> for Charlie"
35+
36+
[3ad3df57-dd98-46fc-9269-1877abf612aa]
37+
description = "full garden -> for David"
38+
39+
[0f0a55d1-9710-46ed-a0eb-399ba8c72db2]
40+
description = "full garden -> for Eve"
41+
42+
[a7e80c90-b140-4ea1-aee3-f4625365c9a4]
43+
description = "full garden -> for Fred"
44+
45+
[9d94b273-2933-471b-86e8-dba68694c615]
46+
description = "full garden -> for Ginny"
47+
48+
[f55bc6c2-ade8-4844-87c4-87196f1b7258]
49+
description = "full garden -> for Harriet"
50+
51+
[759070a3-1bb1-4dd4-be2c-7cce1d7679ae]
52+
description = "full garden -> for Ileana"
53+
54+
[78578123-2755-4d4a-9c7d-e985b8dda1c6]
55+
description = "full garden -> for Joseph"
56+
57+
[6bb66df7-f433-41ab-aec2-3ead6e99f65b]
58+
description = "full garden -> for Kincaid, second to last student's garden"
59+
60+
[d7edec11-6488-418a-94e6-ed509e0fa7eb]
61+
description = "full garden -> for Larry, last student's garden"
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
unit module KindergartenGarden;
2+
3+
constant %PLANTS =
4+
:C<clover>,
5+
:G<grass>,
6+
:R<radishes>,
7+
:V<violets>,
8+
;
9+
10+
sub plants (:$diagram, :$student) is export {
11+
}
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
#!/usr/bin/env raku
2+
use Test;
3+
use lib $?FILE.IO.parent(2).add('lib');
4+
use KindergartenGarden;
5+
6+
cmp-ok( # begin: 1fc316ed-17ab-4fba-88ef-3ae78296b692
7+
plants( :diagram("RC\nGG"), :student("Alice") ),
8+
"~~",
9+
("radishes", "clover", "grass", "grass"),
10+
"partial garden: garden with single student",
11+
); # end: 1fc316ed-17ab-4fba-88ef-3ae78296b692
12+
13+
cmp-ok( # begin: acd19dc1-2200-4317-bc2a-08f021276b40
14+
plants( :diagram("VC\nRC"), :student("Alice") ),
15+
"~~",
16+
("violets", "clover", "radishes", "clover"),
17+
"partial garden: different garden with single student",
18+
); # end: acd19dc1-2200-4317-bc2a-08f021276b40
19+
20+
cmp-ok( # begin: c376fcc8-349c-446c-94b0-903947315757
21+
plants( :diagram("VVCG\nVVRC"), :student("Bob") ),
22+
"~~",
23+
("clover", "grass", "radishes", "clover"),
24+
"partial garden: garden with two students",
25+
); # end: c376fcc8-349c-446c-94b0-903947315757
26+
27+
cmp-ok( # begin: 2d620f45-9617-4924-9d27-751c80d17db9
28+
plants( :diagram("VVCCGG\nVVCCGG"), :student("Bob") ),
29+
"~~",
30+
("clover", "clover", "clover", "clover"),
31+
"partial garden: multiple students for the same garden with three students: second student's garden",
32+
); # end: 2d620f45-9617-4924-9d27-751c80d17db9
33+
34+
cmp-ok( # begin: 57712331-4896-4364-89f8-576421d69c44
35+
plants( :diagram("VVCCGG\nVVCCGG"), :student("Charlie") ),
36+
"~~",
37+
("grass", "grass", "grass", "grass"),
38+
"partial garden: multiple students for the same garden with three students: third student's garden",
39+
); # end: 57712331-4896-4364-89f8-576421d69c44
40+
41+
cmp-ok( # begin: 149b4290-58e1-40f2-8ae4-8b87c46e765b
42+
plants( :diagram("VRCGVVRVCGGCCGVRGCVCGCGV\nVRCCCGCRRGVCGCRVVCVGCGCV"), :student("Alice") ),
43+
"~~",
44+
("violets", "radishes", "violets", "radishes"),
45+
"full garden: for Alice, first student's garden",
46+
); # end: 149b4290-58e1-40f2-8ae4-8b87c46e765b
47+
48+
cmp-ok( # begin: ba25dbbc-10bd-4a37-b18e-f89ecd098a5e
49+
plants( :diagram("VRCGVVRVCGGCCGVRGCVCGCGV\nVRCCCGCRRGVCGCRVVCVGCGCV"), :student("Bob") ),
50+
"~~",
51+
("clover", "grass", "clover", "clover"),
52+
"full garden: for Bob, second student's garden",
53+
); # end: ba25dbbc-10bd-4a37-b18e-f89ecd098a5e
54+
55+
cmp-ok( # begin: 566b621b-f18e-4c5f-873e-be30544b838c
56+
plants( :diagram("VRCGVVRVCGGCCGVRGCVCGCGV\nVRCCCGCRRGVCGCRVVCVGCGCV"), :student("Charlie") ),
57+
"~~",
58+
("violets", "violets", "clover", "grass"),
59+
"full garden: for Charlie",
60+
); # end: 566b621b-f18e-4c5f-873e-be30544b838c
61+
62+
cmp-ok( # begin: 3ad3df57-dd98-46fc-9269-1877abf612aa
63+
plants( :diagram("VRCGVVRVCGGCCGVRGCVCGCGV\nVRCCCGCRRGVCGCRVVCVGCGCV"), :student("David") ),
64+
"~~",
65+
("radishes", "violets", "clover", "radishes"),
66+
"full garden: for David",
67+
); # end: 3ad3df57-dd98-46fc-9269-1877abf612aa
68+
69+
cmp-ok( # begin: 0f0a55d1-9710-46ed-a0eb-399ba8c72db2
70+
plants( :diagram("VRCGVVRVCGGCCGVRGCVCGCGV\nVRCCCGCRRGVCGCRVVCVGCGCV"), :student("Eve") ),
71+
"~~",
72+
("clover", "grass", "radishes", "grass"),
73+
"full garden: for Eve",
74+
); # end: 0f0a55d1-9710-46ed-a0eb-399ba8c72db2
75+
76+
cmp-ok( # begin: a7e80c90-b140-4ea1-aee3-f4625365c9a4
77+
plants( :diagram("VRCGVVRVCGGCCGVRGCVCGCGV\nVRCCCGCRRGVCGCRVVCVGCGCV"), :student("Fred") ),
78+
"~~",
79+
("grass", "clover", "violets", "clover"),
80+
"full garden: for Fred",
81+
); # end: a7e80c90-b140-4ea1-aee3-f4625365c9a4
82+
83+
cmp-ok( # begin: 9d94b273-2933-471b-86e8-dba68694c615
84+
plants( :diagram("VRCGVVRVCGGCCGVRGCVCGCGV\nVRCCCGCRRGVCGCRVVCVGCGCV"), :student("Ginny") ),
85+
"~~",
86+
("clover", "grass", "grass", "clover"),
87+
"full garden: for Ginny",
88+
); # end: 9d94b273-2933-471b-86e8-dba68694c615
89+
90+
cmp-ok( # begin: f55bc6c2-ade8-4844-87c4-87196f1b7258
91+
plants( :diagram("VRCGVVRVCGGCCGVRGCVCGCGV\nVRCCCGCRRGVCGCRVVCVGCGCV"), :student("Harriet") ),
92+
"~~",
93+
("violets", "radishes", "radishes", "violets"),
94+
"full garden: for Harriet",
95+
); # end: f55bc6c2-ade8-4844-87c4-87196f1b7258
96+
97+
cmp-ok( # begin: 759070a3-1bb1-4dd4-be2c-7cce1d7679ae
98+
plants( :diagram("VRCGVVRVCGGCCGVRGCVCGCGV\nVRCCCGCRRGVCGCRVVCVGCGCV"), :student("Ileana") ),
99+
"~~",
100+
("grass", "clover", "violets", "clover"),
101+
"full garden: for Ileana",
102+
); # end: 759070a3-1bb1-4dd4-be2c-7cce1d7679ae
103+
104+
cmp-ok( # begin: 78578123-2755-4d4a-9c7d-e985b8dda1c6
105+
plants( :diagram("VRCGVVRVCGGCCGVRGCVCGCGV\nVRCCCGCRRGVCGCRVVCVGCGCV"), :student("Joseph") ),
106+
"~~",
107+
("violets", "clover", "violets", "grass"),
108+
"full garden: for Joseph",
109+
); # end: 78578123-2755-4d4a-9c7d-e985b8dda1c6
110+
111+
cmp-ok( # begin: 6bb66df7-f433-41ab-aec2-3ead6e99f65b
112+
plants( :diagram("VRCGVVRVCGGCCGVRGCVCGCGV\nVRCCCGCRRGVCGCRVVCVGCGCV"), :student("Kincaid") ),
113+
"~~",
114+
("grass", "clover", "clover", "grass"),
115+
"full garden: for Kincaid, second to last student's garden",
116+
); # end: 6bb66df7-f433-41ab-aec2-3ead6e99f65b
117+
118+
cmp-ok( # begin: d7edec11-6488-418a-94e6-ed509e0fa7eb
119+
plants( :diagram("VRCGVVRVCGGCCGVRGCVCGCGV\nVRCCCGCRRGVCGCRVVCVGCGCV"), :student("Larry") ),
120+
"~~",
121+
("grass", "violets", "clover", "violets"),
122+
"full garden: for Larry, last student's garden",
123+
); # end: d7edec11-6488-418a-94e6-ed509e0fa7eb
124+
125+
done-testing;

0 commit comments

Comments
 (0)