trackler 2.2.1.76 → 2.2.1.77
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/trackler/version.rb +1 -1
- data/problem-specifications/exercises/beer-song/canonical-data.json +33 -17
- data/problem-specifications/exercises/binary-search/canonical-data.json +41 -21
- data/problem-specifications/exercises/book-store/canonical-data.json +58 -30
- data/problem-specifications/exercises/two-fer/metadata.yml +1 -1
- data/tracks/bash/config.json +35 -13
- data/tracks/bash/exercises/acronym/README.md +27 -0
- data/tracks/bash/exercises/acronym/acronym.sh +18 -0
- data/tracks/bash/exercises/acronym/acronym_tests.sh +43 -0
- data/tracks/bash/exercises/acronym/example.sh +18 -0
- data/tracks/bash/exercises/armstrong-numbers/README.md +20 -0
- data/tracks/bash/exercises/armstrong-numbers/armstrong_numbers_test.sh +58 -0
- data/tracks/bash/exercises/armstrong-numbers/example.sh +19 -0
- data/tracks/clojure/config.json +8 -0
- data/tracks/clojure/exercises/two-fer/README.md +19 -0
- data/tracks/clojure/exercises/two-fer/project.clj +4 -0
- data/tracks/clojure/exercises/two-fer/src/example.clj +5 -0
- data/tracks/clojure/exercises/two-fer/src/two_fer.clj +5 -0
- data/tracks/clojure/exercises/two-fer/test/two_fer_test.clj +12 -0
- data/tracks/common-lisp/docs/INSTALLATION.md +26 -0
- data/tracks/go/exercises/kindergarten-garden/kindergarten_garden_test.go +1 -1
- data/tracks/go/exercises/reverse-string/reverse_string_test.go +8 -0
- data/tracks/java/config.json +34 -11
- data/tracks/java/exercises/armstrong-numbers/.meta/src/reference/java/ArmstrongNumbers.java +20 -0
- data/tracks/java/exercises/armstrong-numbers/.meta/version +1 -0
- data/tracks/java/exercises/armstrong-numbers/README.md +30 -0
- data/tracks/java/exercises/armstrong-numbers/build.gradle +18 -0
- data/tracks/java/exercises/armstrong-numbers/src/main/java/ArmstrongNumbers.java +9 -0
- data/tracks/java/exercises/armstrong-numbers/src/test/java/ArmstrongNumbersTest.java +80 -0
- data/tracks/java/exercises/proverb/.meta/src/reference/java/Proverb.java +19 -0
- data/tracks/java/exercises/proverb/README.md +29 -0
- data/tracks/java/exercises/proverb/build.gradle +18 -0
- data/tracks/java/exercises/proverb/src/main/java/Proverb.java +11 -0
- data/tracks/java/exercises/proverb/src/test/java/ProverbTest.java +80 -0
- data/tracks/java/exercises/settings.gradle +2 -0
- data/tracks/perl6/config.json +1 -1
- data/tracks/python/exercises/alphametics/example.py +168 -90
- data/tracks/swift/config.json +16 -0
- data/tracks/swift/exercises/list-ops/Package.swift +5 -0
- data/tracks/swift/exercises/list-ops/README.md +16 -0
- data/tracks/swift/exercises/list-ops/Sources/ListOps.swift +1 -0
- data/tracks/swift/exercises/list-ops/Sources/ListOpsExample.swift +81 -0
- data/tracks/swift/exercises/list-ops/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/list-ops/Tests/ListOpsTests/ListOpsTests.swift +110 -0
- metadata +31 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3da6a850390bdbe8037da25408699c986444008c
|
4
|
+
data.tar.gz: 9d76e2252a450507df607663a2247737af897deb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a61be70536d4c202b42e48b50b5e43ac99e7af60ec9d6b776825af83a146f22f64d71f0be5cd6d95dd1c1f47f8285ce60569ae99b3293ddfa92505f6ebe98558
|
7
|
+
data.tar.gz: eae0a204221616c6d66d209c1096fd88aaee9326953beb440d90a2a53e386fd3e76dfe96b4f2f7ab5d64a703f4be03e78d7fb35e4f24e701cea7a80d66e8a12e
|
data/lib/trackler/version.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"exercise": "beer-song",
|
3
|
-
"version": "2.
|
3
|
+
"version": "2.1.0",
|
4
4
|
"cases": [
|
5
5
|
{
|
6
6
|
"description": "verse",
|
@@ -11,8 +11,10 @@
|
|
11
11
|
{
|
12
12
|
"description": "first generic verse",
|
13
13
|
"property": "recite",
|
14
|
-
"
|
15
|
-
|
14
|
+
"input": {
|
15
|
+
"startBottles": 99,
|
16
|
+
"takeDown": 1
|
17
|
+
},
|
16
18
|
"expected": [
|
17
19
|
"99 bottles of beer on the wall, 99 bottles of beer.",
|
18
20
|
"Take one down and pass it around, 98 bottles of beer on the wall."
|
@@ -21,8 +23,10 @@
|
|
21
23
|
{
|
22
24
|
"description": "last generic verse",
|
23
25
|
"property": "recite",
|
24
|
-
"
|
25
|
-
|
26
|
+
"input": {
|
27
|
+
"startBottles": 3,
|
28
|
+
"takeDown": 1
|
29
|
+
},
|
26
30
|
"expected": [
|
27
31
|
"3 bottles of beer on the wall, 3 bottles of beer.",
|
28
32
|
"Take one down and pass it around, 2 bottles of beer on the wall."
|
@@ -31,8 +35,10 @@
|
|
31
35
|
{
|
32
36
|
"description": "verse with 2 bottles",
|
33
37
|
"property": "recite",
|
34
|
-
"
|
35
|
-
|
38
|
+
"input": {
|
39
|
+
"startBottles": 2,
|
40
|
+
"takeDown": 1
|
41
|
+
},
|
36
42
|
"expected": [
|
37
43
|
"2 bottles of beer on the wall, 2 bottles of beer.",
|
38
44
|
"Take one down and pass it around, 1 bottle of beer on the wall."
|
@@ -41,8 +47,10 @@
|
|
41
47
|
{
|
42
48
|
"description": "verse with 1 bottle",
|
43
49
|
"property": "recite",
|
44
|
-
"
|
45
|
-
|
50
|
+
"input": {
|
51
|
+
"startBottles": 1,
|
52
|
+
"takeDown": 1
|
53
|
+
},
|
46
54
|
"expected": [
|
47
55
|
"1 bottle of beer on the wall, 1 bottle of beer.",
|
48
56
|
"Take it down and pass it around, no more bottles of beer on the wall."
|
@@ -51,8 +59,10 @@
|
|
51
59
|
{
|
52
60
|
"description": "verse with 0 bottles",
|
53
61
|
"property": "recite",
|
54
|
-
"
|
55
|
-
|
62
|
+
"input": {
|
63
|
+
"startBottles": 0,
|
64
|
+
"takeDown": 1
|
65
|
+
},
|
56
66
|
"expected": [
|
57
67
|
"No more bottles of beer on the wall, no more bottles of beer.",
|
58
68
|
"Go to the store and buy some more, 99 bottles of beer on the wall."
|
@@ -71,8 +81,10 @@
|
|
71
81
|
{
|
72
82
|
"description": "first two verses",
|
73
83
|
"property": "recite",
|
74
|
-
"
|
75
|
-
|
84
|
+
"input": {
|
85
|
+
"startBottles": 99,
|
86
|
+
"takeDown": 2
|
87
|
+
},
|
76
88
|
"expected": [
|
77
89
|
"99 bottles of beer on the wall, 99 bottles of beer.",
|
78
90
|
"Take one down and pass it around, 98 bottles of beer on the wall.",
|
@@ -84,8 +96,10 @@
|
|
84
96
|
{
|
85
97
|
"description": "last three verses",
|
86
98
|
"property": "recite",
|
87
|
-
"
|
88
|
-
|
99
|
+
"input": {
|
100
|
+
"startBottles": 2,
|
101
|
+
"takeDown": 3
|
102
|
+
},
|
89
103
|
"expected": [
|
90
104
|
"2 bottles of beer on the wall, 2 bottles of beer.",
|
91
105
|
"Take one down and pass it around, 1 bottle of beer on the wall.",
|
@@ -100,8 +114,10 @@
|
|
100
114
|
{
|
101
115
|
"description": "all verses",
|
102
116
|
"property": "recite",
|
103
|
-
"
|
104
|
-
|
117
|
+
"input": {
|
118
|
+
"startBottles": 99,
|
119
|
+
"takeDown": 100
|
120
|
+
},
|
105
121
|
"expected": [
|
106
122
|
"99 bottles of beer on the wall, 99 bottles of beer.",
|
107
123
|
"Take one down and pass it around, 98 bottles of beer on the wall.",
|
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"exercise": "binary-search",
|
3
|
-
"version": "1.
|
3
|
+
"version": "1.1.0",
|
4
4
|
"comments": [
|
5
5
|
"Here -1 is used to indicate that the value is not included in the array.",
|
6
6
|
"It should be replaced with the respective expression that is idiomatic",
|
@@ -19,71 +19,91 @@
|
|
19
19
|
{
|
20
20
|
"description": "finds a value in an array with one element",
|
21
21
|
"property": "find",
|
22
|
-
"
|
23
|
-
|
22
|
+
"input": {
|
23
|
+
"array": [6],
|
24
|
+
"value": 6
|
25
|
+
},
|
24
26
|
"expected": 0
|
25
27
|
},
|
26
28
|
{
|
27
29
|
"description": "finds a value in the middle of an array",
|
28
30
|
"property": "find",
|
29
|
-
"
|
30
|
-
|
31
|
+
"input": {
|
32
|
+
"array": [1, 3, 4, 6, 8, 9, 11],
|
33
|
+
"value": 6
|
34
|
+
},
|
31
35
|
"expected": 3
|
32
36
|
},
|
33
37
|
{
|
34
38
|
"description": "finds a value at the beginning of an array",
|
35
39
|
"property": "find",
|
36
|
-
"
|
37
|
-
|
40
|
+
"input": {
|
41
|
+
"array": [1, 3, 4, 6, 8, 9, 11],
|
42
|
+
"value": 1
|
43
|
+
},
|
38
44
|
"expected": 0
|
39
45
|
},
|
40
46
|
{
|
41
47
|
"description": "finds a value at the end of an array",
|
42
48
|
"property": "find",
|
43
|
-
"
|
44
|
-
|
49
|
+
"input": {
|
50
|
+
"array": [1, 3, 4, 6, 8, 9, 11],
|
51
|
+
"value": 11
|
52
|
+
},
|
45
53
|
"expected": 6
|
46
54
|
},
|
47
55
|
{
|
48
56
|
"description": "finds a value in an array of odd length",
|
49
57
|
"property": "find",
|
50
|
-
"
|
51
|
-
|
58
|
+
"input": {
|
59
|
+
"array": [1, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 634],
|
60
|
+
"value": 144
|
61
|
+
},
|
52
62
|
"expected": 9
|
53
63
|
},
|
54
64
|
{
|
55
65
|
"description": "finds a value in an array of even length",
|
56
66
|
"property": "find",
|
57
|
-
"
|
58
|
-
|
67
|
+
"input": {
|
68
|
+
"array": [1, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377],
|
69
|
+
"value": 21
|
70
|
+
},
|
59
71
|
"expected": 5
|
60
72
|
},
|
61
73
|
{
|
62
74
|
"description": "identifies that a value is not included in the array",
|
63
75
|
"property": "find",
|
64
|
-
"
|
65
|
-
|
76
|
+
"input": {
|
77
|
+
"array": [1, 3, 4, 6, 8, 9, 11],
|
78
|
+
"value": 7
|
79
|
+
},
|
66
80
|
"expected": -1
|
67
81
|
},
|
68
82
|
{
|
69
83
|
"description": "a value smaller than the array's smallest value is not included",
|
70
84
|
"property": "find",
|
71
|
-
"
|
72
|
-
|
85
|
+
"input": {
|
86
|
+
"array": [1, 3, 4, 6, 8, 9, 11],
|
87
|
+
"value": 0
|
88
|
+
},
|
73
89
|
"expected": -1
|
74
90
|
},
|
75
91
|
{
|
76
92
|
"description": "a value larger than the array's largest value is not included",
|
77
93
|
"property": "find",
|
78
|
-
"
|
79
|
-
|
94
|
+
"input": {
|
95
|
+
"array": [1, 3, 4, 6, 8, 9, 11],
|
96
|
+
"value": 13
|
97
|
+
},
|
80
98
|
"expected": -1
|
81
99
|
},
|
82
100
|
{
|
83
101
|
"description": "nothing is included in an empty array",
|
84
102
|
"property": "find",
|
85
|
-
"
|
86
|
-
|
103
|
+
"input": {
|
104
|
+
"array": [],
|
105
|
+
"value": 1
|
106
|
+
},
|
87
107
|
"expected": -1
|
88
108
|
}
|
89
109
|
]
|
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"exercise": "book-store",
|
3
|
-
"version": "1.
|
3
|
+
"version": "1.2.0",
|
4
4
|
"cases": [
|
5
5
|
{
|
6
6
|
"description": "Return the total basket price after applying the best discount.",
|
@@ -13,102 +13,130 @@
|
|
13
13
|
{
|
14
14
|
"property": "total",
|
15
15
|
"description": "Only a single book",
|
16
|
-
"
|
17
|
-
"
|
16
|
+
"comments": ["Suggested grouping, [[1]]."],
|
17
|
+
"input": {
|
18
|
+
"basket": [1]
|
19
|
+
},
|
18
20
|
"expected": 8.00
|
19
21
|
},
|
20
22
|
{
|
21
23
|
"property": "total",
|
22
24
|
"description": "Two of the same book",
|
23
|
-
"
|
24
|
-
"
|
25
|
+
"comments": ["Suggested grouping, [[2],[2]]."],
|
26
|
+
"input": {
|
27
|
+
"basket": [2,2]
|
28
|
+
},
|
25
29
|
"expected": 16.00
|
26
30
|
},
|
27
31
|
{
|
28
32
|
"property": "total",
|
29
33
|
"description": "Empty basket",
|
30
|
-
"
|
31
|
-
"
|
34
|
+
"comments": ["Suggested grouping, []."],
|
35
|
+
"input": {
|
36
|
+
"basket": []
|
37
|
+
},
|
32
38
|
"expected": 0.00
|
33
39
|
},
|
34
40
|
{
|
35
41
|
"property": "total",
|
36
42
|
"description": "Two different books",
|
37
|
-
"
|
38
|
-
"
|
43
|
+
"comments": ["Suggested grouping, [[1,2]]."],
|
44
|
+
"input": {
|
45
|
+
"basket": [1,2]
|
46
|
+
},
|
39
47
|
"expected": 15.20
|
40
48
|
},
|
41
49
|
{
|
42
50
|
"property": "total",
|
43
51
|
"description": "Three different books",
|
44
|
-
"
|
45
|
-
"
|
52
|
+
"comments": ["Suggested grouping, [[1,2,3]]."],
|
53
|
+
"input": {
|
54
|
+
"basket": [1,2,3]
|
55
|
+
},
|
46
56
|
"expected": 21.60
|
47
57
|
},
|
48
58
|
{
|
49
59
|
"property": "total",
|
50
60
|
"description": "Four different books",
|
51
|
-
"
|
52
|
-
"
|
61
|
+
"comments": ["Suggested grouping, [[1,2,3,4]]."],
|
62
|
+
"input": {
|
63
|
+
"basket": [1,2,3,4]
|
64
|
+
},
|
53
65
|
"expected": 25.60
|
54
66
|
},
|
55
67
|
{
|
56
68
|
"property": "total",
|
57
69
|
"description": "Five different books",
|
58
|
-
"
|
59
|
-
"
|
70
|
+
"comments": ["Suggested grouping, [[1,2,3,4,5]]."],
|
71
|
+
"input": {
|
72
|
+
"basket": [1,2,3,4,5]
|
73
|
+
},
|
60
74
|
"expected": 30.00
|
61
75
|
},
|
62
76
|
{
|
63
77
|
"property": "total",
|
64
78
|
"description": "Two groups of four is cheaper than group of five plus group of three",
|
65
|
-
"
|
66
|
-
"
|
79
|
+
"comments": ["Suggested grouping, [[1,2,3,4],[1,2,3,5]]."],
|
80
|
+
"input": {
|
81
|
+
"basket": [1,1,2,2,3,3,4,5]
|
82
|
+
},
|
67
83
|
"expected": 51.20
|
68
84
|
},
|
69
85
|
{
|
70
86
|
"property": "total",
|
71
87
|
"description": "Group of four plus group of two is cheaper than two groups of three",
|
72
|
-
"
|
73
|
-
"
|
88
|
+
"comments": ["Suggested grouping, [[1,2,3,4],[1,2]]."],
|
89
|
+
"input": {
|
90
|
+
"basket": [1,1,2,2,3,4]
|
91
|
+
},
|
74
92
|
"expected": 40.80
|
75
93
|
},
|
76
94
|
{
|
77
95
|
"property": "total",
|
78
96
|
"description": "Two each of first 4 books and 1 copy each of rest",
|
79
|
-
"
|
80
|
-
"
|
97
|
+
"comments": ["Suggested grouping, [[1,2,3,4,5],[1,2,3,4]]."],
|
98
|
+
"input": {
|
99
|
+
"basket": [1,1,2,2,3,3,4,4,5]
|
100
|
+
},
|
81
101
|
"expected": 55.60
|
82
102
|
},
|
83
103
|
{
|
84
104
|
"property": "total",
|
85
105
|
"description": "Two copies of each book",
|
86
|
-
"
|
87
|
-
"
|
106
|
+
"comments": ["Suggested grouping, [[1,2,3,4,5],[1,2,3,4,5]]."],
|
107
|
+
"input": {
|
108
|
+
"basket": [1,1,2,2,3,3,4,4,5,5]
|
109
|
+
},
|
88
110
|
"expected": 60.00
|
89
111
|
},
|
90
112
|
{
|
91
113
|
"property": "total",
|
92
114
|
"description": "Three copies of first book and 2 each of remaining",
|
93
|
-
"
|
94
|
-
"
|
115
|
+
"comments": ["Suggested grouping, [[1,2,3,4,5],[1,2,3,4,5],[1]]."],
|
116
|
+
"input": {
|
117
|
+
"basket": [1,1,2,2,3,3,4,4,5,5,1]
|
118
|
+
},
|
95
119
|
"expected": 68.00
|
96
120
|
},
|
97
121
|
{
|
98
122
|
"property": "total",
|
99
123
|
"description": "Three each of first 2 books and 2 each of remaining books",
|
100
|
-
"
|
101
|
-
"
|
124
|
+
"comments": ["Suggested grouping, [[1,2,3,4,5],[1,2,3,4,5],[1,2]]."],
|
125
|
+
"input": {
|
126
|
+
"basket": [1,1,2,2,3,3,4,4,5,5,1,2]
|
127
|
+
},
|
102
128
|
"expected": 75.20
|
103
129
|
},
|
104
130
|
{
|
105
131
|
"property": "total",
|
106
132
|
"description": "Four groups of four are cheaper than two groups each of five and three",
|
107
|
-
"
|
108
|
-
"
|
133
|
+
"comments": ["Suggested grouping, [[1,2,3,4],[1,2,3,5],[1,2,3,4],[1,2,3,5]]."],
|
134
|
+
"input": {
|
135
|
+
"basket": [1,1,2,2,3,3,4,5,1,1,2,2,3,3,4,5]
|
136
|
+
},
|
109
137
|
"expected": 102.4
|
110
138
|
}
|
111
139
|
]
|
112
140
|
}
|
113
141
|
]
|
114
|
-
}
|
142
|
+
}
|
@@ -1,4 +1,4 @@
|
|
1
1
|
---
|
2
2
|
blurb: 'Create a sentence of the form "One for X, one for me."'
|
3
|
-
source: "This is an exercise to introduce users to basic programming constructs, just after
|
3
|
+
source: "This is an exercise to introduce users to basic programming constructs, just after Hello World."
|
4
4
|
source_url: "https://en.wikipedia.org/wiki/Two-fer"
|
data/tracks/bash/config.json
CHANGED
@@ -43,6 +43,17 @@
|
|
43
43
|
"uuid": "e24451fd-761d-4d20-81d9-e470486ec44a"
|
44
44
|
},
|
45
45
|
{
|
46
|
+
"core": false,
|
47
|
+
"difficulty": 1,
|
48
|
+
"slug": "acronym",
|
49
|
+
"topics": [
|
50
|
+
"string_transformation",
|
51
|
+
"input_validation"
|
52
|
+
],
|
53
|
+
"unlocked_by": null,
|
54
|
+
"uuid": "5812c10a-aee1-11e7-add7-ef139384f6eb"
|
55
|
+
},
|
56
|
+
{
|
46
57
|
"core": false,
|
47
58
|
"difficulty": 1,
|
48
59
|
"slug": "raindrops",
|
@@ -76,6 +87,17 @@
|
|
76
87
|
],
|
77
88
|
"uuid": "b2b4ee35-108f-45ce-b294-c10d332e5579"
|
78
89
|
},
|
90
|
+
{
|
91
|
+
"core": false,
|
92
|
+
"difficulty": 2,
|
93
|
+
"slug": "armstrong-numbers",
|
94
|
+
"topics": [
|
95
|
+
"integers",
|
96
|
+
"mathematics"
|
97
|
+
],
|
98
|
+
"unlocked_by": null,
|
99
|
+
"uuid": "302b7e1a-4cf6-47d4-8048-b675f667fc98"
|
100
|
+
},
|
79
101
|
{
|
80
102
|
"core": true,
|
81
103
|
"difficulty": 2,
|
@@ -162,18 +184,6 @@
|
|
162
184
|
"unlocked_by": "pangram",
|
163
185
|
"uuid": "9f9a1a49-472f-4a39-aa28-6aa17eeebdc7"
|
164
186
|
},
|
165
|
-
{
|
166
|
-
"core": false,
|
167
|
-
"difficulty": 5,
|
168
|
-
"slug": "atbash-cipher",
|
169
|
-
"topics": [
|
170
|
-
"cryptography",
|
171
|
-
"pattern_matching",
|
172
|
-
"strings"
|
173
|
-
],
|
174
|
-
"unlocked_by": "hamming",
|
175
|
-
"uuid": "03808072-0228-6580-7a9b-cc709a8a5b8c0e600b9"
|
176
|
-
},
|
177
187
|
{
|
178
188
|
"core": false,
|
179
189
|
"difficulty": 2,
|
@@ -186,8 +196,20 @@
|
|
186
196
|
],
|
187
197
|
"unlocked_by": "leap",
|
188
198
|
"uuid": "496e130a-063a-6380-19dc-179f05534717226bca1"
|
199
|
+
},
|
200
|
+
{
|
201
|
+
"core": false,
|
202
|
+
"difficulty": 5,
|
203
|
+
"slug": "atbash-cipher",
|
204
|
+
"topics": [
|
205
|
+
"cryptography",
|
206
|
+
"pattern_matching",
|
207
|
+
"strings"
|
208
|
+
],
|
209
|
+
"unlocked_by": "hamming",
|
210
|
+
"uuid": "03808072-0228-6580-7a9b-cc709a8a5b8c0e600b9"
|
189
211
|
}
|
190
|
-
|
212
|
+
],
|
191
213
|
"foregone": [],
|
192
214
|
"language": "Bash"
|
193
215
|
}
|