trackler 1.0.4.0 → 1.0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/common/CONTRIBUTING.md +17 -2
- data/common/exercises/anagram/canonical-data.json +0 -14
- data/common/exercises/pig-latin/canonical-data.json +6 -1
- data/common/exercises/raindrops/description.md +4 -4
- data/common/exercises/raindrops/metadata.yml +1 -1
- data/common/exercises/roman-numerals/metadata.yml +1 -1
- data/lib/trackler/version.rb +1 -1
- data/tracks/c/config.json +12 -1
- data/tracks/c/exercises/roman-numerals/makefile +16 -0
- data/tracks/c/exercises/roman-numerals/src/example.c +43 -0
- data/tracks/c/exercises/roman-numerals/src/example.h +6 -0
- data/tracks/c/exercises/roman-numerals/test/test_roman_numerals.c +126 -0
- data/tracks/c/exercises/roman-numerals/test/vendor/unity.c +1300 -0
- data/tracks/c/exercises/roman-numerals/test/vendor/unity.h +274 -0
- data/tracks/c/exercises/roman-numerals/test/vendor/unity_internals.h +701 -0
- data/tracks/clojure/exercises/flatten-array/project.clj +4 -0
- data/tracks/csharp/exercises/protein-translation/ProteinTranslationTest.cs +1 -1
- data/tracks/elixir/exercises/bowling/bowling_test.exs +157 -62
- data/tracks/elixir/exercises/bowling/example.exs +33 -4
- data/tracks/erlang/config.json +176 -36
- data/tracks/go/.travis.yml +7 -1
- data/tracks/go/bin/test-without-stubs +29 -0
- data/tracks/go/exercises/robot-simulator/defs.go +1 -1
- data/tracks/go/exercises/variable-length-quantity/variable_length_quantity_test.go +31 -25
- data/tracks/haskell/.travis.yml +9 -5
- data/tracks/haskell/config.json +127 -121
- data/tracks/haskell/exercises/leap/src/LeapYear.hs +1 -1
- data/tracks/haskell/exercises/space-age/HINTS.md +14 -2
- data/tracks/haskell/exercises/space-age/{src/Example.hs → examples/success-double/SpaceAge.hs} +0 -0
- data/tracks/haskell/exercises/space-age/examples/success-double/package.yaml +19 -0
- data/tracks/haskell/exercises/space-age/examples/success-rational/SpaceAge.hs +24 -0
- data/tracks/haskell/exercises/space-age/examples/success-rational/package.yaml +19 -0
- data/tracks/haskell/exercises/space-age/src/SpaceAge.hs +4 -1
- data/tracks/haskell/exercises/space-age/test/Tests.hs +12 -5
- data/tracks/haskell/exercises/word-count/HINTS.md +21 -0
- data/tracks/haskell/exercises/word-count/examples/success-newtype/WordCount.hs +31 -0
- data/tracks/haskell/exercises/word-count/examples/success-newtype/package.yaml +21 -0
- data/tracks/haskell/exercises/word-count/examples/success-simple/WordCount.hs +13 -0
- data/tracks/haskell/exercises/word-count/examples/success-simple/package.yaml +20 -0
- data/tracks/haskell/exercises/word-count/package.yaml +0 -2
- data/tracks/haskell/exercises/word-count/src/WordCount.hs +2 -1
- data/tracks/haskell/exercises/word-count/test/Tests.hs +15 -6
- data/tracks/haskell/exercises/zebra-puzzle/package.yaml +19 -0
- data/tracks/haskell/exercises/zebra-puzzle/src/Example.hs +113 -0
- data/tracks/haskell/exercises/zebra-puzzle/src/ZebraPuzzle.hs +12 -0
- data/tracks/haskell/exercises/zebra-puzzle/stack.yaml +1 -0
- data/tracks/haskell/exercises/zebra-puzzle/test/Tests.hs +13 -0
- data/tracks/javascript/exercises/beer-song/beer-song.spec.js +5 -0
- data/tracks/lisp/config.json +147 -0
- data/tracks/ocaml/config.json +12 -0
- data/tracks/ocaml/exercises/atbash-cipher/.merlin +5 -0
- data/tracks/ocaml/exercises/atbash-cipher/HINTS.md +17 -0
- data/tracks/ocaml/exercises/atbash-cipher/Makefile +11 -0
- data/tracks/ocaml/exercises/atbash-cipher/atbash_cipher.mli +5 -0
- data/tracks/ocaml/exercises/atbash-cipher/example.ml +47 -0
- data/tracks/ocaml/exercises/atbash-cipher/test.ml +37 -0
- data/tracks/ocaml/exercises/meetup/.merlin +5 -0
- data/tracks/ocaml/exercises/meetup/Makefile +11 -0
- data/tracks/ocaml/exercises/meetup/example.ml +63 -0
- data/tracks/ocaml/exercises/meetup/meetup.mli +7 -0
- data/tracks/ocaml/exercises/meetup/test.ml +786 -0
- data/tracks/php/exercises/bowling/bowling_test.php +233 -10
- data/tracks/php/exercises/bowling/example.php +49 -6
- data/tracks/python/.travis.yml +5 -0
- data/tracks/python/config.json +33 -1
- data/tracks/python/exercises/flatten-array/example.py +18 -0
- data/tracks/python/exercises/flatten-array/flatten_array_test.py +40 -0
- data/tracks/python/exercises/robot-name/robot_name_test.py +8 -2
- data/tracks/r/config.json +32 -8
- data/tracks/ruby/bin/enable-executable +9 -5
- data/tracks/ruby/bin/executable-tests-check +7 -3
- data/tracks/ruby/bin/local-status-check +4 -4
- data/tracks/ruby/config.json +8 -1
- data/tracks/ruby/exercises/acronym/acronym_test.rb +0 -1
- data/tracks/ruby/exercises/anagram/.version +1 -0
- data/tracks/ruby/exercises/anagram/anagram_test.rb +101 -31
- data/tracks/ruby/exercises/anagram/example.rb +4 -0
- data/tracks/ruby/exercises/anagram/example.tt +19 -0
- data/tracks/ruby/exercises/gigasecond/.version +1 -1
- data/tracks/ruby/exercises/gigasecond/example.rb +1 -1
- data/tracks/ruby/exercises/gigasecond/gigasecond_test.rb +2 -2
- data/tracks/ruby/exercises/isogram/.version +1 -0
- data/tracks/ruby/exercises/isogram/example.rb +10 -0
- data/tracks/ruby/exercises/isogram/example.tt +20 -0
- data/tracks/ruby/exercises/isogram/isogram_test.rb +90 -0
- data/tracks/ruby/exercises/poker/example.rb +97 -39
- data/tracks/ruby/exercises/poker/poker_test.rb +67 -36
- data/tracks/ruby/exercises/sieve/.version +1 -0
- data/tracks/ruby/exercises/sieve/example.rb +4 -0
- data/tracks/ruby/exercises/sieve/example.tt +21 -0
- data/tracks/ruby/exercises/sieve/sieve_test.rb +36 -13
- data/tracks/ruby/exercises/word-count/example.tt +4 -3
- data/tracks/ruby/exercises/word-count/word_count_test.rb +38 -48
- data/tracks/ruby/lib/anagram_cases.rb +42 -0
- data/tracks/ruby/lib/isogram_cases.rb +24 -0
- data/tracks/ruby/lib/sieve_cases.rb +33 -0
- data/tracks/ruby/lib/word_count_cases.rb +19 -0
- data/tracks/scala/config.json +21 -0
- data/tracks/scala/docs/RESOURCES.md +1 -0
- data/tracks/scala/exercises/bracket-push/build.sbt +4 -0
- data/tracks/scala/exercises/bracket-push/example.scala +23 -0
- data/tracks/scala/exercises/bracket-push/src/main/scala/.keep +0 -0
- data/tracks/scala/exercises/bracket-push/src/test/scala/BracketsTest.scala +68 -0
- data/tracks/scala/exercises/change/src/test/scala/ChangeTest.scala +7 -0
- data/tracks/scala/exercises/sgf-parsing/build.sbt +7 -0
- data/tracks/scala/exercises/sgf-parsing/example.scala +66 -0
- data/tracks/scala/exercises/sgf-parsing/src/main/scala/.keep +0 -0
- data/tracks/scala/exercises/sgf-parsing/src/main/scala/Sgf.scala +17 -0
- data/tracks/scala/exercises/sgf-parsing/src/test/scala/SgfTest.scala +66 -0
- data/tracks/scala/exercises/zebra-puzzle/build.sbt +3 -0
- data/tracks/scala/exercises/zebra-puzzle/example.scala +152 -0
- data/tracks/scala/exercises/zebra-puzzle/src/main/scala/.keep +0 -0
- data/tracks/scala/exercises/zebra-puzzle/src/main/scala/ZebraPuzzle.scala +14 -0
- data/tracks/scala/exercises/zebra-puzzle/src/test/scala/ZebraPuzzleTest.scala +11 -0
- data/tracks/scala/testgen/src/main/scala/BracketPushTestGenerator.scala +44 -0
- metadata +63 -3
- data/tracks/haskell/exercises/word-count/src/Example.hs +0 -8
data/tracks/go/.travis.yml
CHANGED
@@ -54,7 +54,9 @@ before_script:
|
|
54
54
|
# -cpu 2 is for our problems that involve concurrency to test that they
|
55
55
|
# perform as expected on multiple cores.
|
56
56
|
script:
|
57
|
-
-
|
57
|
+
- if [ -n "$STATIC_CHECKERS" ]; then ./bin/test-without-stubs fmt; fi
|
58
|
+
- if [ -n "$STATIC_CHECKERS" ]; then ./bin/test-without-stubs vet; fi
|
59
|
+
- if [ -z "$STATIC_CHECKERS" ]; then ./bin/test-without-stubs; fi
|
58
60
|
|
59
61
|
# special cases for the build matrix are that go 1.4.3 can't be tested 32 bit
|
60
62
|
# and that tip is allowed to fail. Broken tips are extremely rare these days
|
@@ -63,6 +65,10 @@ matrix:
|
|
63
65
|
exclude:
|
64
66
|
- go: 1.4.3
|
65
67
|
env: TESTARCH=386
|
68
|
+
include:
|
69
|
+
# Keep this in sync with the latest version.
|
70
|
+
- go: 1.7
|
71
|
+
env: STATIC_CHECKERS=1
|
66
72
|
allow_failures:
|
67
73
|
- go: tip
|
68
74
|
- go: 1.4.3
|
@@ -19,8 +19,13 @@ for dir in exercises/*; do
|
|
19
19
|
fi
|
20
20
|
done
|
21
21
|
|
22
|
+
root=$(pwd)
|
23
|
+
|
22
24
|
cleanup () {
|
23
25
|
echo "moving stub files back"
|
26
|
+
# the cd for go fmt or go vet could leave us in an unexpected place.
|
27
|
+
# cd to a known place.
|
28
|
+
cd "$root"
|
24
29
|
|
25
30
|
# could use `rename` here, but it's not uniform among platforms.
|
26
31
|
# some renames take two arguments while others take a single regex.
|
@@ -33,6 +38,30 @@ cleanup () {
|
|
33
38
|
|
34
39
|
trap cleanup EXIT INT TERM
|
35
40
|
|
41
|
+
if [ "$1" = "fmt" ]; then
|
42
|
+
for dir in exercises/*; do
|
43
|
+
cd $dir
|
44
|
+
if [ -n "$(go fmt)" ]; then
|
45
|
+
echo "please run 'go fmt' on $dir" >&2
|
46
|
+
exit 1
|
47
|
+
fi
|
48
|
+
cd "$root"
|
49
|
+
done
|
50
|
+
exit 0
|
51
|
+
fi
|
52
|
+
|
53
|
+
if [ "$1" = "vet" ]; then
|
54
|
+
for dir in exercises/*; do
|
55
|
+
cd $dir
|
56
|
+
if ! go vet; then
|
57
|
+
echo "please follow the 'go vet' suggestions in $dir" >&2
|
58
|
+
exit 1
|
59
|
+
fi
|
60
|
+
cd "$root"
|
61
|
+
done
|
62
|
+
exit 0
|
63
|
+
fi
|
64
|
+
|
36
65
|
# This is the last command in the file,
|
37
66
|
# so the exit status of this script is the exit status of go test.
|
38
67
|
# If this ever changes, remember to preserve the exit status acordingly.
|
@@ -5,37 +5,43 @@ import (
|
|
5
5
|
"testing"
|
6
6
|
)
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
}
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
10: {[]byte{0x81, 0x10}, 144, 1},
|
26
|
-
}
|
8
|
+
var testCases = []struct {
|
9
|
+
input []byte
|
10
|
+
output uint32
|
11
|
+
size int
|
12
|
+
}{
|
13
|
+
0: {[]byte{0x7F}, 127, 1},
|
14
|
+
1: {[]byte{0x81, 0x00}, 128, 1},
|
15
|
+
2: {[]byte{0xC0, 0x00}, 8192, 1},
|
16
|
+
3: {[]byte{0xFF, 0x7F}, 16383, 1},
|
17
|
+
4: {[]byte{0x81, 0x80, 0x00}, 16384, 2},
|
18
|
+
5: {[]byte{0xFF, 0xFF, 0x7F}, 2097151, 2},
|
19
|
+
6: {[]byte{0x81, 0x80, 0x80, 0x00}, 2097152, 3},
|
20
|
+
7: {[]byte{0xC0, 0x80, 0x80, 0x00}, 134217728, 3},
|
21
|
+
8: {[]byte{0xFF, 0xFF, 0xFF, 0x7F}, 268435455, 3},
|
22
|
+
9: {[]byte{0x82, 0x00}, 256, 1},
|
23
|
+
10: {[]byte{0x81, 0x10}, 144, 1},
|
24
|
+
}
|
27
25
|
|
26
|
+
func TestDecodeVarint(t *testing.T) {
|
28
27
|
for i, tc := range testCases {
|
29
|
-
t.Logf("test case %d - %#v\n", i, tc.input)
|
30
28
|
o, size := DecodeVarint(tc.input)
|
31
29
|
if o != tc.output {
|
32
|
-
t.Fatalf("expected %d
|
33
|
-
}
|
34
|
-
|
35
|
-
|
30
|
+
t.Fatalf("FAIL: case %d - expected %d got %d\n", i, tc.output, o)
|
31
|
+
} else if size != tc.size {
|
32
|
+
t.Fatalf("FAIL: case %d - expected encoding size of %d bytes\ngot %d bytes\n", i, tc.size, size)
|
33
|
+
} else {
|
34
|
+
t.Logf("PASS: case %d - %#v\n", i, tc.input)
|
36
35
|
}
|
36
|
+
}
|
37
|
+
}
|
38
|
+
|
39
|
+
func TestEncodeVarint(t *testing.T) {
|
40
|
+
for i, tc := range testCases {
|
37
41
|
if encoded := EncodeVarint(tc.output); bytes.Compare(encoded, tc.input) != 0 {
|
38
|
-
t.Fatalf("%d -
|
42
|
+
t.Fatalf("FAIL: case %d - %d \nexpected\t%#v\ngot\t\t%#v\n", i, tc.output, tc.input, encoded)
|
43
|
+
} else {
|
44
|
+
t.Logf("PASS: case %d - %#v\n", i, tc.input)
|
39
45
|
}
|
40
46
|
}
|
41
47
|
}
|
data/tracks/haskell/.travis.yml
CHANGED
@@ -52,12 +52,12 @@ script:
|
|
52
52
|
for exercise in ${TRAVIS_BUILD_DIR}/exercises/* ; do
|
53
53
|
pushd ${exercise}
|
54
54
|
|
55
|
-
# `stack --work-dir` fails if not targeting a subdirectory, so we just
|
56
|
-
# symbolic-link `.stack-work` to a subfolder in the cache directory.
|
57
|
-
mkdir -p "${HOME}/.foldercache/${exercise}/.stack-work"
|
58
|
-
ln -f -s "${HOME}/.foldercache/${exercise}/.stack-work"
|
59
|
-
|
60
55
|
if [ -f src/Example.hs ]; then
|
56
|
+
# `stack --work-dir` fails if not targeting a subdirectory, so we just
|
57
|
+
# symbolic-link `.stack-work` to a subfolder in the cache directory.
|
58
|
+
mkdir -p "${HOME}/.foldercache/${exercise}/.stack-work"
|
59
|
+
ln -f -s "${HOME}/.foldercache/${exercise}/.stack-work"
|
60
|
+
|
61
61
|
# Here we prepare the exercise to be tested by Stack.
|
62
62
|
MODULE=`sed -n 's/ *module \+\([a-zA-Z0-9]\+\).*/\1/p' src/Example.hs`
|
63
63
|
mv src/Example.hs "src/${MODULE}.hs"
|
@@ -68,6 +68,10 @@ script:
|
|
68
68
|
exit 1
|
69
69
|
else
|
70
70
|
for example in examples/*/ ; do
|
71
|
+
examplename=$(basename "$example")
|
72
|
+
mkdir -p "${HOME}/.foldercache/${exercise}/${examplename}/.stack-work"
|
73
|
+
ln -f -s "${HOME}/.foldercache/${exercise}/${examplename}/.stack-work"
|
74
|
+
|
71
75
|
echo "testing ${example}"
|
72
76
|
rm -f src/*.hs
|
73
77
|
mv ${example}/*.hs src
|
data/tracks/haskell/config.json
CHANGED
@@ -11,398 +11,404 @@
|
|
11
11
|
]
|
12
12
|
},
|
13
13
|
{
|
14
|
-
"slug": "
|
14
|
+
"slug": "space-age",
|
15
15
|
"difficulty": 1,
|
16
16
|
"topics": [
|
17
17
|
]
|
18
18
|
},
|
19
19
|
{
|
20
|
-
"slug": "
|
20
|
+
"slug": "bob",
|
21
21
|
"difficulty": 1,
|
22
22
|
"topics": [
|
23
23
|
]
|
24
24
|
},
|
25
25
|
{
|
26
|
-
"slug": "
|
26
|
+
"slug": "rna-transcription",
|
27
27
|
"difficulty": 1,
|
28
28
|
"topics": [
|
29
29
|
]
|
30
30
|
},
|
31
31
|
{
|
32
|
-
"slug": "
|
32
|
+
"slug": "sum-of-multiples",
|
33
33
|
"difficulty": 1,
|
34
34
|
"topics": [
|
35
35
|
]
|
36
36
|
},
|
37
37
|
{
|
38
|
-
"slug": "
|
38
|
+
"slug": "difference-of-squares",
|
39
39
|
"difficulty": 1,
|
40
40
|
"topics": [
|
41
41
|
]
|
42
42
|
},
|
43
43
|
{
|
44
|
-
"slug": "
|
45
|
-
"difficulty":
|
44
|
+
"slug": "grains",
|
45
|
+
"difficulty": 2,
|
46
46
|
"topics": [
|
47
47
|
]
|
48
48
|
},
|
49
49
|
{
|
50
50
|
"slug": "hamming",
|
51
|
-
"difficulty":
|
51
|
+
"difficulty": 2,
|
52
52
|
"topics": [
|
53
53
|
]
|
54
54
|
},
|
55
55
|
{
|
56
|
-
"slug": "
|
57
|
-
"difficulty":
|
56
|
+
"slug": "nucleotide-count",
|
57
|
+
"difficulty": 2,
|
58
58
|
"topics": [
|
59
59
|
]
|
60
60
|
},
|
61
61
|
{
|
62
|
-
"slug": "
|
63
|
-
"difficulty":
|
62
|
+
"slug": "grade-school",
|
63
|
+
"difficulty": 2,
|
64
64
|
"topics": [
|
65
65
|
]
|
66
66
|
},
|
67
67
|
{
|
68
|
-
"slug": "
|
69
|
-
"difficulty":
|
68
|
+
"slug": "etl",
|
69
|
+
"difficulty": 2,
|
70
70
|
"topics": [
|
71
71
|
]
|
72
72
|
},
|
73
73
|
{
|
74
|
-
"slug": "
|
75
|
-
"difficulty":
|
74
|
+
"slug": "raindrops",
|
75
|
+
"difficulty": 2,
|
76
76
|
"topics": [
|
77
77
|
]
|
78
78
|
},
|
79
79
|
{
|
80
|
-
"slug": "
|
81
|
-
"difficulty":
|
80
|
+
"slug": "accumulate",
|
81
|
+
"difficulty": 3,
|
82
82
|
"topics": [
|
83
83
|
]
|
84
84
|
},
|
85
85
|
{
|
86
|
-
"slug": "
|
87
|
-
"difficulty":
|
86
|
+
"slug": "strain",
|
87
|
+
"difficulty": 3,
|
88
88
|
"topics": [
|
89
89
|
]
|
90
90
|
},
|
91
91
|
{
|
92
|
-
"slug": "
|
93
|
-
"difficulty":
|
92
|
+
"slug": "phone-number",
|
93
|
+
"difficulty": 3,
|
94
94
|
"topics": [
|
95
95
|
]
|
96
96
|
},
|
97
97
|
{
|
98
|
-
"slug": "
|
99
|
-
"difficulty":
|
98
|
+
"slug": "beer-song",
|
99
|
+
"difficulty": 3,
|
100
100
|
"topics": [
|
101
101
|
]
|
102
102
|
},
|
103
103
|
{
|
104
|
-
"slug": "
|
105
|
-
"difficulty":
|
104
|
+
"slug": "triangle",
|
105
|
+
"difficulty": 3,
|
106
106
|
"topics": [
|
107
107
|
]
|
108
108
|
},
|
109
109
|
{
|
110
|
-
"slug": "
|
111
|
-
"difficulty":
|
110
|
+
"slug": "scrabble-score",
|
111
|
+
"difficulty": 3,
|
112
112
|
"topics": [
|
113
113
|
]
|
114
114
|
},
|
115
115
|
{
|
116
|
-
"slug": "
|
117
|
-
"difficulty":
|
116
|
+
"slug": "kindergarten-garden",
|
117
|
+
"difficulty": 3,
|
118
118
|
"topics": [
|
119
119
|
]
|
120
120
|
},
|
121
121
|
{
|
122
|
-
"slug": "
|
123
|
-
"difficulty":
|
122
|
+
"slug": "robot-simulator",
|
123
|
+
"difficulty": 3,
|
124
124
|
"topics": [
|
125
125
|
]
|
126
126
|
},
|
127
127
|
{
|
128
|
-
"slug": "
|
129
|
-
"difficulty":
|
128
|
+
"slug": "secret-handshake",
|
129
|
+
"difficulty": 3,
|
130
130
|
"topics": [
|
131
131
|
]
|
132
132
|
},
|
133
133
|
{
|
134
|
-
"slug": "
|
135
|
-
"difficulty":
|
134
|
+
"slug": "anagram",
|
135
|
+
"difficulty": 4,
|
136
136
|
"topics": [
|
137
137
|
]
|
138
138
|
},
|
139
139
|
{
|
140
|
-
"slug": "
|
141
|
-
"difficulty":
|
140
|
+
"slug": "simple-linked-list",
|
141
|
+
"difficulty": 4,
|
142
142
|
"topics": [
|
143
143
|
]
|
144
144
|
},
|
145
145
|
{
|
146
|
-
"slug": "
|
147
|
-
"difficulty":
|
146
|
+
"slug": "list-ops",
|
147
|
+
"difficulty": 4,
|
148
148
|
"topics": [
|
149
149
|
]
|
150
150
|
},
|
151
151
|
{
|
152
|
-
"slug": "
|
153
|
-
"difficulty":
|
152
|
+
"slug": "word-count",
|
153
|
+
"difficulty": 4,
|
154
154
|
"topics": [
|
155
155
|
]
|
156
156
|
},
|
157
157
|
{
|
158
|
-
"slug": "
|
159
|
-
"difficulty":
|
158
|
+
"slug": "meetup",
|
159
|
+
"difficulty": 4,
|
160
160
|
"topics": [
|
161
161
|
]
|
162
162
|
},
|
163
163
|
{
|
164
|
-
"slug": "
|
165
|
-
"difficulty":
|
164
|
+
"slug": "roman-numerals",
|
165
|
+
"difficulty": 4,
|
166
166
|
"topics": [
|
167
167
|
]
|
168
168
|
},
|
169
169
|
{
|
170
|
-
"slug": "
|
171
|
-
"difficulty":
|
170
|
+
"slug": "prime-factors",
|
171
|
+
"difficulty": 4,
|
172
|
+
"topics": [
|
173
|
+
]
|
174
|
+
},
|
175
|
+
{
|
176
|
+
"slug": "allergies",
|
177
|
+
"difficulty": 4,
|
172
178
|
"topics": [
|
173
179
|
]
|
174
180
|
},
|
175
181
|
{
|
176
182
|
"slug": "all-your-base",
|
177
|
-
"difficulty":
|
183
|
+
"difficulty": 4,
|
178
184
|
"topics": [
|
179
185
|
]
|
180
186
|
},
|
181
187
|
{
|
182
|
-
"slug": "
|
183
|
-
"difficulty":
|
188
|
+
"slug": "largest-series-product",
|
189
|
+
"difficulty": 4,
|
184
190
|
"topics": [
|
185
191
|
]
|
186
192
|
},
|
187
193
|
{
|
188
|
-
"slug": "
|
189
|
-
"difficulty":
|
194
|
+
"slug": "clock",
|
195
|
+
"difficulty": 4,
|
190
196
|
"topics": [
|
191
197
|
]
|
192
198
|
},
|
193
199
|
{
|
194
|
-
"slug": "
|
195
|
-
"difficulty":
|
200
|
+
"slug": "matrix",
|
201
|
+
"difficulty": 4,
|
196
202
|
"topics": [
|
197
203
|
]
|
198
204
|
},
|
199
205
|
{
|
200
|
-
"slug": "
|
201
|
-
"difficulty":
|
206
|
+
"slug": "house",
|
207
|
+
"difficulty": 4,
|
202
208
|
"topics": [
|
203
209
|
]
|
204
210
|
},
|
205
211
|
{
|
206
|
-
"slug": "
|
207
|
-
"difficulty":
|
212
|
+
"slug": "pascals-triangle",
|
213
|
+
"difficulty": 4,
|
208
214
|
"topics": [
|
209
215
|
]
|
210
216
|
},
|
211
217
|
{
|
212
|
-
"slug": "
|
213
|
-
"difficulty":
|
218
|
+
"slug": "pythagorean-triplet",
|
219
|
+
"difficulty": 4,
|
214
220
|
"topics": [
|
215
221
|
]
|
216
222
|
},
|
217
223
|
{
|
218
|
-
"slug": "
|
219
|
-
"difficulty":
|
224
|
+
"slug": "saddle-points",
|
225
|
+
"difficulty": 4,
|
220
226
|
"topics": [
|
221
227
|
]
|
222
228
|
},
|
223
229
|
{
|
224
|
-
"slug": "
|
225
|
-
"difficulty":
|
230
|
+
"slug": "series",
|
231
|
+
"difficulty": 4,
|
226
232
|
"topics": [
|
227
233
|
]
|
228
234
|
},
|
229
235
|
{
|
230
|
-
"slug": "
|
231
|
-
"difficulty":
|
236
|
+
"slug": "sieve",
|
237
|
+
"difficulty": 4,
|
232
238
|
"topics": [
|
233
239
|
]
|
234
240
|
},
|
235
241
|
{
|
236
|
-
"slug": "
|
237
|
-
"difficulty":
|
242
|
+
"slug": "atbash-cipher",
|
243
|
+
"difficulty": 5,
|
238
244
|
"topics": [
|
239
245
|
]
|
240
246
|
},
|
241
247
|
{
|
242
|
-
"slug": "
|
243
|
-
"difficulty":
|
248
|
+
"slug": "crypto-square",
|
249
|
+
"difficulty": 5,
|
244
250
|
"topics": [
|
245
251
|
]
|
246
252
|
},
|
247
253
|
{
|
248
|
-
"slug": "
|
249
|
-
"difficulty":
|
254
|
+
"slug": "nth-prime",
|
255
|
+
"difficulty": 5,
|
250
256
|
"topics": [
|
251
257
|
]
|
252
258
|
},
|
253
259
|
{
|
254
|
-
"slug": "
|
255
|
-
"difficulty":
|
260
|
+
"slug": "binary-search-tree",
|
261
|
+
"difficulty": 5,
|
256
262
|
"topics": [
|
257
263
|
]
|
258
264
|
},
|
259
265
|
{
|
260
|
-
"slug": "
|
261
|
-
"difficulty":
|
266
|
+
"slug": "luhn",
|
267
|
+
"difficulty": 5,
|
262
268
|
"topics": [
|
263
269
|
]
|
264
270
|
},
|
265
271
|
{
|
266
|
-
"slug": "
|
267
|
-
"difficulty":
|
272
|
+
"slug": "queen-attack",
|
273
|
+
"difficulty": 5,
|
268
274
|
"topics": [
|
269
275
|
]
|
270
276
|
},
|
271
277
|
{
|
272
|
-
"slug": "
|
273
|
-
"difficulty":
|
278
|
+
"slug": "ocr-numbers",
|
279
|
+
"difficulty": 5,
|
274
280
|
"topics": [
|
275
281
|
]
|
276
282
|
},
|
277
283
|
{
|
278
|
-
"slug": "
|
279
|
-
"difficulty":
|
284
|
+
"slug": "food-chain",
|
285
|
+
"difficulty": 5,
|
280
286
|
"topics": [
|
281
287
|
]
|
282
288
|
},
|
283
289
|
{
|
284
290
|
"slug": "custom-set",
|
285
|
-
"difficulty":
|
291
|
+
"difficulty": 5,
|
286
292
|
"topics": [
|
287
293
|
]
|
288
294
|
},
|
289
295
|
{
|
290
|
-
"slug": "
|
291
|
-
"difficulty":
|
296
|
+
"slug": "parallel-letter-frequency",
|
297
|
+
"difficulty": 5,
|
292
298
|
"topics": [
|
293
299
|
]
|
294
300
|
},
|
295
301
|
{
|
296
|
-
"slug": "
|
297
|
-
"difficulty":
|
302
|
+
"slug": "simple-cipher",
|
303
|
+
"difficulty": 6,
|
298
304
|
"topics": [
|
299
305
|
]
|
300
306
|
},
|
301
307
|
{
|
302
|
-
"slug": "
|
303
|
-
"difficulty":
|
308
|
+
"slug": "palindrome-products",
|
309
|
+
"difficulty": 6,
|
304
310
|
"topics": [
|
305
311
|
]
|
306
312
|
},
|
307
313
|
{
|
308
|
-
"slug": "
|
309
|
-
"difficulty":
|
314
|
+
"slug": "robot-name",
|
315
|
+
"difficulty": 6,
|
310
316
|
"topics": [
|
311
317
|
]
|
312
318
|
},
|
313
319
|
{
|
314
|
-
"slug": "
|
315
|
-
"difficulty":
|
320
|
+
"slug": "pig-latin",
|
321
|
+
"difficulty": 6,
|
316
322
|
"topics": [
|
317
323
|
]
|
318
324
|
},
|
319
325
|
{
|
320
|
-
"slug": "
|
321
|
-
"difficulty":
|
326
|
+
"slug": "say",
|
327
|
+
"difficulty": 6,
|
322
328
|
"topics": [
|
323
329
|
]
|
324
330
|
},
|
325
331
|
{
|
326
|
-
"slug": "
|
327
|
-
"difficulty":
|
332
|
+
"slug": "bank-account",
|
333
|
+
"difficulty": 6,
|
328
334
|
"topics": [
|
329
335
|
]
|
330
336
|
},
|
331
337
|
{
|
332
|
-
"slug": "
|
333
|
-
"difficulty":
|
338
|
+
"slug": "sublist",
|
339
|
+
"difficulty": 6,
|
334
340
|
"topics": [
|
335
341
|
]
|
336
342
|
},
|
337
343
|
{
|
338
|
-
"slug": "
|
339
|
-
"difficulty":
|
344
|
+
"slug": "linked-list",
|
345
|
+
"difficulty": 6,
|
340
346
|
"topics": [
|
341
347
|
]
|
342
348
|
},
|
343
349
|
{
|
344
|
-
"slug": "
|
345
|
-
"difficulty":
|
350
|
+
"slug": "zebra-puzzle",
|
351
|
+
"difficulty": 7,
|
346
352
|
"topics": [
|
347
353
|
]
|
348
354
|
},
|
349
355
|
{
|
350
|
-
"slug": "
|
351
|
-
"difficulty":
|
356
|
+
"slug": "minesweeper",
|
357
|
+
"difficulty": 7,
|
352
358
|
"topics": [
|
353
359
|
]
|
354
360
|
},
|
355
361
|
{
|
356
|
-
"slug": "
|
357
|
-
"difficulty":
|
362
|
+
"slug": "wordy",
|
363
|
+
"difficulty": 7,
|
358
364
|
"topics": [
|
359
365
|
]
|
360
366
|
},
|
361
367
|
{
|
362
|
-
"slug": "
|
363
|
-
"difficulty":
|
368
|
+
"slug": "change",
|
369
|
+
"difficulty": 7,
|
364
370
|
"topics": [
|
365
371
|
]
|
366
372
|
},
|
367
373
|
{
|
368
|
-
"slug": "
|
369
|
-
"difficulty":
|
374
|
+
"slug": "connect",
|
375
|
+
"difficulty": 8,
|
370
376
|
"topics": [
|
371
377
|
]
|
372
378
|
},
|
373
379
|
{
|
374
380
|
"slug": "sgf-parsing",
|
375
|
-
"difficulty":
|
381
|
+
"difficulty": 9,
|
376
382
|
"topics": [
|
377
383
|
]
|
378
384
|
},
|
379
385
|
{
|
380
386
|
"slug": "go-counting",
|
381
|
-
"difficulty":
|
387
|
+
"difficulty": 9,
|
382
388
|
"topics": [
|
383
389
|
]
|
384
390
|
},
|
385
391
|
{
|
386
|
-
"slug": "
|
387
|
-
"difficulty":
|
392
|
+
"slug": "lens-person",
|
393
|
+
"difficulty": 9,
|
388
394
|
"topics": [
|
389
395
|
]
|
390
396
|
},
|
391
397
|
{
|
392
|
-
"slug": "
|
393
|
-
"difficulty":
|
398
|
+
"slug": "zipper",
|
399
|
+
"difficulty": 10,
|
394
400
|
"topics": [
|
395
401
|
]
|
396
402
|
},
|
397
403
|
{
|
398
|
-
"slug": "
|
399
|
-
"difficulty":
|
404
|
+
"slug": "forth",
|
405
|
+
"difficulty": 10,
|
400
406
|
"topics": [
|
401
407
|
]
|
402
408
|
},
|
403
409
|
{
|
404
410
|
"slug": "pov",
|
405
|
-
"difficulty":
|
411
|
+
"difficulty": 10,
|
406
412
|
"topics": [
|
407
413
|
]
|
408
414
|
}
|