trackler 1.0.4.0 → 1.0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
}
|