trackler 2.2.1.15 → 2.2.1.16
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/TOPICS.txt +8 -1
- data/tracks/c/docs/SNIPPET.txt +11 -0
- data/tracks/ceylon/docs/SNIPPET.txt +3 -0
- data/tracks/clojure/docs/SNIPPET.txt +5 -0
- data/tracks/csharp/build.cake +23 -16
- data/tracks/csharp/build.ps1 +1 -1
- data/tracks/csharp/build.sh +1 -1
- data/tracks/csharp/exercises/pangram/PangramTest.cs +9 -18
- data/tracks/csharp/generators/.gitignore +2 -1
- data/tracks/csharp/generators/Exercise.cs +11 -12
- data/tracks/csharp/generators/Exercises/AllYourBase.cs +2 -2
- data/tracks/csharp/generators/Exercises/Allergies.cs +1 -1
- data/tracks/csharp/generators/Exercises/Alphametics.cs +1 -1
- data/tracks/csharp/generators/Exercises/Anagram.cs +1 -1
- data/tracks/csharp/generators/Exercises/BeerSong.cs +1 -1
- data/tracks/csharp/generators/Exercises/BinarySearch.cs +1 -1
- data/tracks/csharp/generators/Exercises/BookStore.cs +1 -1
- data/tracks/csharp/generators/Exercises/BracketPush.cs +1 -1
- data/tracks/csharp/generators/Exercises/CollatzConjecture.cs +2 -2
- data/tracks/csharp/generators/Exercises/CryptoSquare.cs +1 -1
- data/tracks/csharp/generators/Exercises/FoodChain.cs +1 -1
- data/tracks/csharp/generators/Exercises/Gigasecond.cs +1 -1
- data/tracks/csharp/generators/Exercises/Hamming.cs +1 -1
- data/tracks/csharp/generators/Exercises/House.cs +1 -1
- data/tracks/csharp/generators/Exercises/Leap.cs +1 -1
- data/tracks/csharp/generators/Exercises/Luhn.cs +1 -1
- data/tracks/csharp/generators/Exercises/NthPrime.cs +1 -1
- data/tracks/csharp/generators/Exercises/Pangram.cs +1 -11
- data/tracks/csharp/generators/Exercises/PerfectNumbers.cs +1 -1
- data/tracks/csharp/generators/Exercises/PhoneNumber.cs +1 -1
- data/tracks/csharp/generators/Exercises/RailFenceCipher.cs +1 -1
- data/tracks/csharp/generators/Exercises/RnaTranscription.cs +1 -1
- data/tracks/csharp/generators/Exercises/RomanNumerals.cs +1 -1
- data/tracks/csharp/generators/Exercises/RunLengthEncoding.cs +1 -1
- data/tracks/csharp/generators/Exercises/Say.cs +2 -7
- data/tracks/csharp/generators/Exercises/SecretHandshake.cs +1 -1
- data/tracks/csharp/generators/Exercises/Sieve.cs +1 -1
- data/tracks/csharp/generators/Exercises/SpaceAge.cs +1 -1
- data/tracks/csharp/generators/Exercises/SumOfMultiples.cs +1 -1
- data/tracks/csharp/generators/Exercises/Transpose.cs +1 -1
- data/tracks/csharp/generators/Exercises/WordCount.cs +1 -1
- data/tracks/csharp/generators/Exercises/Wordy.cs +1 -1
- data/tracks/csharp/generators/Output/FormattingExtensions.cs +4 -2
- data/tracks/csharp/generators/Output/ValueFormatter.cs +1 -1
- data/tracks/delphi/docs/SNIPPET.txt +6 -13
- data/tracks/ecmascript/docs/SNIPPET.txt +7 -0
- data/tracks/elisp/docs/SNIPPET.txt +13 -0
- data/tracks/elixir/config.json +2 -2
- data/tracks/elixir/docs/SNIPPET.txt +10 -0
- data/tracks/erlang/docs/SNIPPET.txt +8 -0
- data/tracks/fsharp/docs/SNIPPET.txt +3 -0
- data/tracks/go/config.json +174 -174
- data/tracks/go/config/maintainers.json +6 -9
- data/tracks/go/docs/SNIPPET.txt +6 -0
- data/tracks/groovy/config.json +4 -4
- data/tracks/groovy/docs/SNIPPET.txt +12 -0
- data/tracks/haskell/config.json +2 -0
- data/tracks/haskell/docs/SNIPPET.txt +4 -0
- data/tracks/java/docs/SNIPPET.txt +7 -0
- data/tracks/java/exercises/robot-simulator/src/example/java/GridPosition.java +21 -16
- data/tracks/java/exercises/robot-simulator/src/test/java/RobotTest.java +24 -24
- data/tracks/javascript/docs/SNIPPET.txt +10 -0
- data/tracks/kotlin/docs/SNIPPET.txt +3 -0
- data/tracks/kotlin/exercises/change/src/example/kotlin/ChangeCalculator.kt +35 -0
- data/tracks/kotlin/exercises/change/src/test/kotlin/ChangeCalculatorTest.kt +105 -0
- data/tracks/lfe/docs/SNIPPET.txt +12 -0
- data/tracks/lua/docs/SNIPPET.txt +7 -0
- data/tracks/mips/docs/SNIPPET.txt +23 -0
- data/tracks/ocaml/docs/SNIPPET.txt +1 -0
- data/tracks/purescript/config.json +1 -1
- data/tracks/purescript/docs/SNIPPET.txt +8 -0
- data/tracks/python/exercises/saddle-points/README.md +1 -1
- data/tracks/racket/docs/SNIPPET.txt +6 -0
- data/tracks/ruby/docs/SNIPPET.txt +5 -0
- data/tracks/rust/docs/SNIPPET.txt +3 -0
- data/tracks/scala/docs/SNIPPET.txt +4 -0
- data/tracks/scala/exercises/ocr-numbers/example.scala +17 -11
- data/tracks/scala/exercises/ocr-numbers/src/test/scala/OcrNumbersTest.scala +153 -0
- data/tracks/scala/exercises/pig-latin/example.scala +11 -6
- data/tracks/scala/exercises/pig-latin/src/test/scala/PigLatinTest.scala +80 -10
- data/tracks/scala/testgen/src/main/scala/OcrNumbersTestGenerator.scala +34 -0
- data/tracks/scala/testgen/src/main/scala/PigLatinTestGenerator.scala +16 -0
- data/tracks/scheme/docs/SNIPPET.txt +7 -0
- data/tracks/sml/bin/generate +277 -0
- data/tracks/sml/config.json +30 -0
- data/tracks/sml/docs/ABOUT.md +32 -0
- data/tracks/sml/docs/LEARNING.md +37 -0
- data/tracks/sml/docs/SNIPPET.txt +3 -0
- data/tracks/sml/exercises/bob/README.md +48 -0
- data/tracks/sml/exercises/bob/bob.sml +2 -0
- data/tracks/sml/exercises/bob/example.sml +22 -0
- data/tracks/sml/exercises/bob/test.sml +87 -0
- data/tracks/sml/exercises/bob/testlib.sml +159 -0
- data/tracks/sml/exercises/difference-of-squares/README.md +49 -0
- data/tracks/sml/exercises/difference-of-squares/difference-of-squares.sml +8 -0
- data/tracks/sml/exercises/difference-of-squares/example.sml +11 -0
- data/tracks/sml/exercises/difference-of-squares/test.sml +45 -0
- data/tracks/sml/exercises/difference-of-squares/testlib.sml +159 -0
- data/tracks/sml/exercises/hello-world/README.md +51 -0
- data/tracks/sml/exercises/hello-world/example.sml +1 -0
- data/tracks/sml/exercises/hello-world/hello-world.sml +2 -0
- data/tracks/sml/exercises/hello-world/test.sml +15 -0
- data/tracks/sml/exercises/hello-world/testlib.sml +159 -0
- data/tracks/sml/lib/testlib.sml +159 -0
- data/tracks/swift/docs/SNIPPET.txt +9 -0
- data/tracks/typescript/docs/SNIPPET.txt +8 -0
- metadata +53 -6
- data/tracks/csharp/generators/Generators.csproj.user +0 -6
- data/tracks/kotlin/exercises/change/src/example/kotlin/Change.kt +0 -70
- data/tracks/kotlin/exercises/change/src/test/kotlin/ChangeTest.kt +0 -55
- data/tracks/scala/exercises/ocr-numbers/src/test/scala/OcrTest.scala +0 -138
@@ -6,7 +6,7 @@ public class House : Exercise
|
|
6
6
|
{
|
7
7
|
protected override void UpdateCanonicalData(CanonicalData canonicalData)
|
8
8
|
{
|
9
|
-
foreach (var canonicalDataCase in
|
9
|
+
foreach (var canonicalDataCase in canonicalData.Cases)
|
10
10
|
{
|
11
11
|
canonicalDataCase.UseVariableForExpected = true;
|
12
12
|
canonicalDataCase.Expected = canonicalDataCase.Expected.ConvertMultiLineString();
|
@@ -6,7 +6,7 @@ public class Leap : Exercise
|
|
6
6
|
{
|
7
7
|
protected override void UpdateCanonicalData(CanonicalData canonicalData)
|
8
8
|
{
|
9
|
-
foreach (var canonicalDataCase in
|
9
|
+
foreach (var canonicalDataCase in canonicalData.Cases)
|
10
10
|
canonicalDataCase.Property = "IsLeapYear";
|
11
11
|
}
|
12
12
|
}
|
@@ -6,7 +6,7 @@ public class Luhn : Exercise
|
|
6
6
|
{
|
7
7
|
protected override void UpdateCanonicalData(CanonicalData canonicalData)
|
8
8
|
{
|
9
|
-
foreach (var canonicalDataCase in
|
9
|
+
foreach (var canonicalDataCase in canonicalData.Cases)
|
10
10
|
canonicalDataCase.Property = "IsValid";
|
11
11
|
}
|
12
12
|
}
|
@@ -7,7 +7,7 @@ public class NthPrime : Exercise
|
|
7
7
|
{
|
8
8
|
protected override void UpdateCanonicalData(CanonicalData canonicalData)
|
9
9
|
{
|
10
|
-
foreach (var canonicalDataCase in
|
10
|
+
foreach (var canonicalDataCase in canonicalData.Cases)
|
11
11
|
canonicalDataCase.ExceptionThrown = canonicalDataCase.Expected is bool ? typeof(ArgumentOutOfRangeException) : null;
|
12
12
|
}
|
13
13
|
}
|
@@ -1,16 +1,6 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
namespace Generators.Exercises
|
1
|
+
namespace Generators.Exercises
|
4
2
|
{
|
5
3
|
public class Pangram : Exercise
|
6
4
|
{
|
7
|
-
protected override void UpdateCanonicalData(CanonicalData canonicalData)
|
8
|
-
{
|
9
|
-
foreach (var canonicalDataCase in CanonicalData.Cases)
|
10
|
-
{
|
11
|
-
canonicalDataCase.UseVariablesForInput = true;
|
12
|
-
canonicalDataCase.Input["input"] = ((string)canonicalDataCase.Input["input"]).Replace("\"", "\\\"");
|
13
|
-
}
|
14
|
-
}
|
15
5
|
}
|
16
6
|
}
|
@@ -10,7 +10,7 @@ public class PerfectNumbers : Exercise
|
|
10
10
|
{
|
11
11
|
protected override void UpdateCanonicalData(CanonicalData canonicalData)
|
12
12
|
{
|
13
|
-
foreach (var canonicalDataCase in
|
13
|
+
foreach (var canonicalDataCase in canonicalData.Cases)
|
14
14
|
{
|
15
15
|
canonicalDataCase.ExceptionThrown = canonicalDataCase.Expected is JObject ? typeof(ArgumentOutOfRangeException) : null;
|
16
16
|
|
@@ -7,7 +7,7 @@ public class PhoneNumber : Exercise
|
|
7
7
|
{
|
8
8
|
protected override void UpdateCanonicalData(CanonicalData canonicalData)
|
9
9
|
{
|
10
|
-
foreach (var canonicalDataCase in
|
10
|
+
foreach (var canonicalDataCase in canonicalData.Cases)
|
11
11
|
{
|
12
12
|
canonicalDataCase.UseVariablesForInput = true;
|
13
13
|
canonicalDataCase.ExceptionThrown = canonicalDataCase.Expected is null ? typeof(ArgumentException) : null;
|
@@ -7,7 +7,7 @@ public class RailFenceCipher : Exercise
|
|
7
7
|
{
|
8
8
|
protected override void UpdateCanonicalData(CanonicalData canonicalData)
|
9
9
|
{
|
10
|
-
foreach (var canonicalDataCase in
|
10
|
+
foreach (var canonicalDataCase in canonicalData.Cases)
|
11
11
|
{
|
12
12
|
canonicalDataCase.ConstructorInput = new Dictionary<string, object>
|
13
13
|
{
|
@@ -7,7 +7,7 @@ public class RnaTranscription : Exercise
|
|
7
7
|
{
|
8
8
|
protected override void UpdateCanonicalData(CanonicalData canonicalData)
|
9
9
|
{
|
10
|
-
foreach (var canonicalDataCase in
|
10
|
+
foreach (var canonicalDataCase in canonicalData.Cases)
|
11
11
|
{
|
12
12
|
canonicalDataCase.ExceptionThrown = canonicalDataCase.Expected is null ? typeof(ArgumentException) : null;
|
13
13
|
}
|
@@ -6,7 +6,7 @@ public class RomanNumerals : Exercise
|
|
6
6
|
{
|
7
7
|
protected override void UpdateCanonicalData(CanonicalData canonicalData)
|
8
8
|
{
|
9
|
-
foreach (var canonicalDataCase in
|
9
|
+
foreach (var canonicalDataCase in canonicalData.Cases)
|
10
10
|
{
|
11
11
|
canonicalDataCase.TestedMethodType = TestedMethodType.Extension;
|
12
12
|
canonicalDataCase.Property = "ToRoman";
|
@@ -7,7 +7,7 @@ public class RunLengthEncoding : Exercise
|
|
7
7
|
{
|
8
8
|
protected override void UpdateCanonicalData(CanonicalData canonicalData)
|
9
9
|
{
|
10
|
-
foreach (var canonicalDataCase in
|
10
|
+
foreach (var canonicalDataCase in canonicalData.Cases)
|
11
11
|
{
|
12
12
|
// Prefix the test name with encode/decode because both functions are tested with the same cases
|
13
13
|
canonicalDataCase.Description = $"{canonicalDataCase.Property} {canonicalDataCase.Description}";
|
@@ -7,14 +7,9 @@ public class Say : Exercise
|
|
7
7
|
{
|
8
8
|
protected override void UpdateCanonicalData(CanonicalData canonicalData)
|
9
9
|
{
|
10
|
-
foreach (var canonicalDataCase in
|
10
|
+
foreach (var canonicalDataCase in canonicalData.Cases)
|
11
11
|
{
|
12
|
-
|
13
|
-
if (canonicalDataCase.Property == "say")
|
14
|
-
{
|
15
|
-
canonicalDataCase.Property = "in_english";
|
16
|
-
}
|
17
|
-
|
12
|
+
canonicalDataCase.Property = "InEnglish";
|
18
13
|
canonicalDataCase.ExceptionThrown = canonicalDataCase.Expected is long ? typeof(ArgumentOutOfRangeException) : null;
|
19
14
|
}
|
20
15
|
}
|
@@ -6,7 +6,7 @@ public class SecretHandshake : Exercise
|
|
6
6
|
{
|
7
7
|
protected override void UpdateCanonicalData(CanonicalData canonicalData)
|
8
8
|
{
|
9
|
-
foreach (var canonicalDataCase in
|
9
|
+
foreach (var canonicalDataCase in canonicalData.Cases)
|
10
10
|
{
|
11
11
|
canonicalDataCase.Expected = canonicalDataCase.Expected.ConvertToEnumerable<string>();
|
12
12
|
}
|
@@ -7,7 +7,7 @@ public class Sieve : Exercise
|
|
7
7
|
{
|
8
8
|
protected override void UpdateCanonicalData(CanonicalData canonicalData)
|
9
9
|
{
|
10
|
-
foreach (var canonicalDataCase in
|
10
|
+
foreach (var canonicalDataCase in canonicalData.Cases)
|
11
11
|
{
|
12
12
|
canonicalDataCase.UseVariableForExpected = true;
|
13
13
|
canonicalDataCase.ExceptionThrown = (long)canonicalDataCase.Input["limit"] < 2 ? typeof(ArgumentOutOfRangeException) : null;
|
@@ -7,7 +7,7 @@ public class SpaceAge : Exercise
|
|
7
7
|
{
|
8
8
|
protected override void UpdateCanonicalData(CanonicalData canonicalData)
|
9
9
|
{
|
10
|
-
foreach (var canonicalDataCase in
|
10
|
+
foreach (var canonicalDataCase in canonicalData.Cases)
|
11
11
|
{
|
12
12
|
canonicalDataCase.TestedMethodType = TestedMethodType.Instance;
|
13
13
|
|
@@ -8,7 +8,7 @@ public class SumOfMultiples : Exercise
|
|
8
8
|
{
|
9
9
|
protected override void UpdateCanonicalData(CanonicalData canonicalData)
|
10
10
|
{
|
11
|
-
foreach (var canonicalDataCase in
|
11
|
+
foreach (var canonicalDataCase in canonicalData.Cases)
|
12
12
|
{
|
13
13
|
var hasFactors = canonicalDataCase.Input["factors"].ConvertToEnumerable<long>().Any();
|
14
14
|
|
@@ -7,7 +7,7 @@ public class Transpose : Exercise
|
|
7
7
|
{
|
8
8
|
protected override void UpdateCanonicalData(CanonicalData canonicalData)
|
9
9
|
{
|
10
|
-
foreach (var canonicalDataCase in
|
10
|
+
foreach (var canonicalDataCase in canonicalData.Cases)
|
11
11
|
{
|
12
12
|
canonicalDataCase.Property = "String";
|
13
13
|
canonicalDataCase.Input = new Dictionary<string, object>
|
@@ -8,7 +8,7 @@ public class WordCount : Exercise
|
|
8
8
|
{
|
9
9
|
protected override void UpdateCanonicalData(CanonicalData canonicalData)
|
10
10
|
{
|
11
|
-
foreach (var canonicalDataCase in
|
11
|
+
foreach (var canonicalDataCase in canonicalData.Cases)
|
12
12
|
{
|
13
13
|
canonicalDataCase.UseVariableForExpected = true;
|
14
14
|
canonicalDataCase.UseVariableForTested = true;
|
@@ -7,7 +7,7 @@ public class Wordy : Exercise
|
|
7
7
|
{
|
8
8
|
protected override void UpdateCanonicalData(CanonicalData canonicalData)
|
9
9
|
{
|
10
|
-
foreach (var canonicalDataCase in
|
10
|
+
foreach (var canonicalDataCase in canonicalData.Cases)
|
11
11
|
canonicalDataCase.ExceptionThrown = canonicalDataCase.Expected is bool ? typeof(ArgumentException) : null;
|
12
12
|
}
|
13
13
|
}
|
@@ -4,10 +4,12 @@ public static class FormattingExtensions
|
|
4
4
|
{
|
5
5
|
public static string Indent(this string str, int level = 1) => $"{new string(' ', 4 * level)}{str}";
|
6
6
|
|
7
|
-
public static string
|
7
|
+
public static string EscapeSpecialCharacters(this string s)
|
8
8
|
=> s.Replace("\n", "\\n")
|
9
9
|
.Replace("\t", "\\t")
|
10
|
-
.Replace("\r", "\\r")
|
10
|
+
.Replace("\r", "\\r")
|
11
|
+
.Replace("\"", "\\\"");
|
12
|
+
|
11
13
|
|
12
14
|
public static string Quote(this string s) => $"\"{s}\"";
|
13
15
|
}
|
@@ -61,7 +61,7 @@ public static string[] FormatVariable(object val, string name)
|
|
61
61
|
}
|
62
62
|
}
|
63
63
|
|
64
|
-
private static string FormatString(this string s) => s.
|
64
|
+
private static string FormatString(this string s) => s.EscapeSpecialCharacters().Quote();
|
65
65
|
|
66
66
|
private static string[] FormatMultiLineString(string name, string str)
|
67
67
|
{
|
@@ -1,14 +1,7 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
interface
|
4
|
-
|
5
|
-
function Hello: string;
|
6
|
-
|
7
|
-
implementation
|
8
|
-
|
9
|
-
function Hello: string;
|
1
|
+
function DigitSum(AValue: Int64): Integer;
|
10
2
|
begin
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
3
|
+
if AValue mod 10 = AValue then
|
4
|
+
Result := AValue
|
5
|
+
else
|
6
|
+
Result := (AValue mod 10) + DigitSum(AValue div 10)
|
7
|
+
end;
|
@@ -0,0 +1,13 @@
|
|
1
|
+
;;; hello-world.el --- Hello World Exercise (exercism)
|
2
|
+
|
3
|
+
;;; Commentary:
|
4
|
+
|
5
|
+
;;; Code:
|
6
|
+
|
7
|
+
(defun hello (&optional name)
|
8
|
+
"Say hello, optionally to NAME."
|
9
|
+
(let ((greetee (or name "World")))
|
10
|
+
(concat "Hello, " greetee "!")))
|
11
|
+
|
12
|
+
(provide 'hello-world)
|
13
|
+
;;; hello-world.el ends here
|
data/tracks/elixir/config.json
CHANGED
data/tracks/go/config.json
CHANGED
@@ -24,75 +24,74 @@
|
|
24
24
|
"uuid": "dc4ad67d-0fe4-0880-5a13-3aebb8759bcc3095de1"
|
25
25
|
},
|
26
26
|
{
|
27
|
-
"core":
|
27
|
+
"core": false,
|
28
28
|
"difficulty": 1,
|
29
|
-
"slug": "
|
29
|
+
"slug": "leap",
|
30
30
|
"topics": [
|
31
|
-
"
|
32
|
-
"
|
33
|
-
"
|
31
|
+
"booleans",
|
32
|
+
"control-flow-(conditionals)",
|
33
|
+
"integers",
|
34
|
+
"logic"
|
34
35
|
],
|
35
|
-
"unlocked_by":
|
36
|
-
"uuid": "
|
36
|
+
"unlocked_by": "hamming",
|
37
|
+
"uuid": "fee57b09-2b67-4483-a2e5-3dfec0568b15"
|
37
38
|
},
|
38
39
|
{
|
39
40
|
"core": true,
|
40
|
-
"difficulty":
|
41
|
-
"slug": "
|
41
|
+
"difficulty": 3,
|
42
|
+
"slug": "clock",
|
42
43
|
"topics": [
|
43
|
-
"
|
44
|
-
"
|
45
|
-
"
|
44
|
+
"equality",
|
45
|
+
"mathematics",
|
46
|
+
"text-formatting",
|
47
|
+
"time"
|
46
48
|
],
|
47
49
|
"unlocked_by": null,
|
48
|
-
"uuid": "
|
50
|
+
"uuid": "7d2de21e-bf67-495e-8d90-05e1a35d5b99"
|
49
51
|
},
|
50
52
|
{
|
51
|
-
"core":
|
53
|
+
"core": false,
|
52
54
|
"difficulty": 1,
|
53
|
-
"slug": "
|
55
|
+
"slug": "gigasecond",
|
54
56
|
"topics": [
|
55
|
-
"
|
56
|
-
"maps",
|
57
|
-
"strings"
|
57
|
+
"time"
|
58
58
|
],
|
59
|
-
"unlocked_by":
|
60
|
-
"uuid": "
|
59
|
+
"unlocked_by": "hamming",
|
60
|
+
"uuid": "ea390e58-6ac5-4219-89bb-648852712a6a"
|
61
61
|
},
|
62
62
|
{
|
63
63
|
"core": true,
|
64
64
|
"difficulty": 1,
|
65
|
-
"slug": "
|
65
|
+
"slug": "hamming",
|
66
66
|
"topics": [
|
67
67
|
"control-flow-(loops)",
|
68
|
-
"
|
69
|
-
"
|
68
|
+
"equality",
|
69
|
+
"strings"
|
70
70
|
],
|
71
71
|
"unlocked_by": null,
|
72
|
-
"uuid": "
|
72
|
+
"uuid": "52582415-8f7f-4ac5-857f-5c160ec48134"
|
73
73
|
},
|
74
74
|
{
|
75
75
|
"core": true,
|
76
|
-
"difficulty":
|
77
|
-
"slug": "
|
76
|
+
"difficulty": 1,
|
77
|
+
"slug": "raindrops",
|
78
78
|
"topics": [
|
79
|
-
"
|
80
|
-
"
|
79
|
+
"control-flow-(conditionals)",
|
80
|
+
"filtering",
|
81
|
+
"strings"
|
81
82
|
],
|
82
83
|
"unlocked_by": null,
|
83
|
-
"uuid": "
|
84
|
+
"uuid": "2f51e32a-9b1f-4100-9eec-517115c858e9"
|
84
85
|
},
|
85
86
|
{
|
86
|
-
"core":
|
87
|
-
"difficulty":
|
88
|
-
"slug": "
|
87
|
+
"core": false,
|
88
|
+
"difficulty": 1,
|
89
|
+
"slug": "accumulate",
|
89
90
|
"topics": [
|
90
|
-
"
|
91
|
-
"control-flow-(loops)",
|
92
|
-
"filtering"
|
91
|
+
"lists"
|
93
92
|
],
|
94
|
-
"unlocked_by":
|
95
|
-
"uuid": "
|
93
|
+
"unlocked_by": "raindrops",
|
94
|
+
"uuid": "fb03948c-11e8-440d-9a5d-979396451270"
|
96
95
|
},
|
97
96
|
{
|
98
97
|
"core": true,
|
@@ -107,117 +106,97 @@
|
|
107
106
|
"uuid": "b39d9e79-dee0-4c70-a6c3-114bee8083f2"
|
108
107
|
},
|
109
108
|
{
|
110
|
-
"core":
|
111
|
-
"difficulty":
|
112
|
-
"slug": "
|
109
|
+
"core": false,
|
110
|
+
"difficulty": 2,
|
111
|
+
"slug": "pangram",
|
113
112
|
"topics": [
|
114
|
-
"
|
115
|
-
"
|
116
|
-
"logic"
|
113
|
+
"control-flow-(loops)",
|
114
|
+
"strings"
|
117
115
|
],
|
118
|
-
"unlocked_by":
|
119
|
-
"uuid": "
|
116
|
+
"unlocked_by": "raindrops",
|
117
|
+
"uuid": "d14c6283-e57c-472c-8181-87f82d9088dd"
|
120
118
|
},
|
121
119
|
{
|
122
|
-
"core":
|
123
|
-
"difficulty":
|
124
|
-
"slug": "
|
120
|
+
"core": false,
|
121
|
+
"difficulty": 2,
|
122
|
+
"slug": "bob",
|
125
123
|
"topics": [
|
126
|
-
"
|
127
|
-
"
|
128
|
-
"text-formatting",
|
129
|
-
"time"
|
124
|
+
"control-flow-(conditionals)",
|
125
|
+
"strings"
|
130
126
|
],
|
131
|
-
"unlocked_by":
|
132
|
-
"uuid": "
|
127
|
+
"unlocked_by": "raindrops",
|
128
|
+
"uuid": "efdf07a1-e329-4d0f-90a1-374b9b8af748"
|
133
129
|
},
|
134
130
|
{
|
135
131
|
"core": true,
|
136
132
|
"difficulty": 3,
|
137
|
-
"slug": "
|
133
|
+
"slug": "triangle",
|
138
134
|
"topics": [
|
139
|
-
"
|
140
|
-
"
|
135
|
+
"booleans",
|
136
|
+
"control-flow-(conditionals)",
|
137
|
+
"logic"
|
141
138
|
],
|
142
139
|
"unlocked_by": null,
|
143
|
-
"uuid": "
|
140
|
+
"uuid": "6769557a-33fa-4257-adbf-e66dc8c06f85"
|
144
141
|
},
|
145
142
|
{
|
146
143
|
"core": true,
|
147
|
-
"difficulty":
|
148
|
-
"slug": "
|
144
|
+
"difficulty": 4,
|
145
|
+
"slug": "twelve-days",
|
149
146
|
"topics": [
|
150
|
-
"
|
147
|
+
"algorithms",
|
148
|
+
"pattern-recognition",
|
149
|
+
"sequences",
|
150
|
+
"strings",
|
151
|
+
"text-formatting"
|
151
152
|
],
|
152
153
|
"unlocked_by": null,
|
153
|
-
"uuid": "
|
154
|
+
"uuid": "75b6e2e8-1e20-4f53-b7c5-e32f9f7eea58"
|
154
155
|
},
|
155
156
|
{
|
156
157
|
"core": true,
|
157
158
|
"difficulty": 2,
|
158
|
-
"slug": "
|
159
|
+
"slug": "difference-of-squares",
|
159
160
|
"topics": [
|
160
|
-
"
|
161
|
-
"
|
162
|
-
"integers",
|
163
|
-
"mathematics",
|
164
|
-
"type-conversion"
|
161
|
+
"algorithms",
|
162
|
+
"mathematics"
|
165
163
|
],
|
166
164
|
"unlocked_by": null,
|
167
|
-
"uuid": "
|
165
|
+
"uuid": "19628c8a-a89f-457e-9526-3d400024a927"
|
168
166
|
},
|
169
167
|
{
|
170
|
-
"core":
|
171
|
-
"difficulty":
|
172
|
-
"slug": "
|
168
|
+
"core": false,
|
169
|
+
"difficulty": 5,
|
170
|
+
"slug": "error-handling",
|
173
171
|
"topics": [
|
174
|
-
"
|
175
|
-
"refactoring",
|
176
|
-
"strings"
|
172
|
+
"exception-handling"
|
177
173
|
],
|
178
|
-
"unlocked_by":
|
179
|
-
"uuid": "
|
174
|
+
"unlocked_by": "queen-attack",
|
175
|
+
"uuid": "cd05b63b-df20-4c8d-8743-53033acf7696"
|
180
176
|
},
|
181
177
|
{
|
182
|
-
"core":
|
178
|
+
"core": false,
|
183
179
|
"difficulty": 5,
|
184
|
-
"slug": "
|
180
|
+
"slug": "secret-handshake",
|
185
181
|
"topics": [
|
186
|
-
"algorithms",
|
187
182
|
"arrays",
|
188
|
-
"
|
189
|
-
"
|
183
|
+
"bitwise-operations",
|
184
|
+
"integers"
|
190
185
|
],
|
191
|
-
"unlocked_by":
|
192
|
-
"uuid": "
|
186
|
+
"unlocked_by": "grains",
|
187
|
+
"uuid": "9a1870e0-dce7-496e-9521-2f2b606ac6c5"
|
193
188
|
},
|
194
189
|
{
|
195
|
-
"core":
|
190
|
+
"core": false,
|
196
191
|
"difficulty": 4,
|
197
|
-
"slug": "
|
192
|
+
"slug": "house",
|
198
193
|
"topics": [
|
199
|
-
"
|
200
|
-
"pattern-recognition",
|
201
|
-
"sequences",
|
194
|
+
"recursion",
|
202
195
|
"strings",
|
203
196
|
"text-formatting"
|
204
197
|
],
|
205
|
-
"unlocked_by":
|
206
|
-
"uuid": "
|
207
|
-
},
|
208
|
-
{
|
209
|
-
"core": true,
|
210
|
-
"difficulty": 4,
|
211
|
-
"slug": "matrix",
|
212
|
-
"topics": [
|
213
|
-
"arrays",
|
214
|
-
"exception-handling",
|
215
|
-
"matrices",
|
216
|
-
"strings",
|
217
|
-
"type-conversion"
|
218
|
-
],
|
219
|
-
"unlocked_by": null,
|
220
|
-
"uuid": "62aa3d20-65d8-440f-9d08-48bbc823f4fe"
|
198
|
+
"unlocked_by": "twelve-days",
|
199
|
+
"uuid": "11008fb0-4ef9-4aff-befb-c56f4084f96e"
|
221
200
|
},
|
222
201
|
{
|
223
202
|
"core": false,
|
@@ -230,6 +209,18 @@
|
|
230
209
|
"unlocked_by": "series",
|
231
210
|
"uuid": "92e2a192-5ee9-422a-8699-c231a7136b10"
|
232
211
|
},
|
212
|
+
{
|
213
|
+
"core": true,
|
214
|
+
"difficulty": 3,
|
215
|
+
"slug": "series",
|
216
|
+
"topics": [
|
217
|
+
"arrays",
|
218
|
+
"refactoring",
|
219
|
+
"strings"
|
220
|
+
],
|
221
|
+
"unlocked_by": null,
|
222
|
+
"uuid": "2c5fb577-a9ce-4c4c-8fc8-fffb38d020d6"
|
223
|
+
},
|
233
224
|
{
|
234
225
|
"core": true,
|
235
226
|
"difficulty": 5,
|
@@ -244,93 +235,52 @@
|
|
244
235
|
"uuid": "95f49a88-6f01-4905-a8b1-a3fcec1f535a"
|
245
236
|
},
|
246
237
|
{
|
247
|
-
"core":
|
248
|
-
"difficulty":
|
249
|
-
"slug": "
|
238
|
+
"core": true,
|
239
|
+
"difficulty": 2,
|
240
|
+
"slug": "grains",
|
250
241
|
"topics": [
|
251
|
-
"
|
252
|
-
"control-flow-(
|
242
|
+
"bitwise-operations",
|
243
|
+
"control-flow-(if-else-statements)",
|
253
244
|
"integers",
|
254
|
-
"
|
245
|
+
"mathematics",
|
246
|
+
"type-conversion"
|
255
247
|
],
|
256
|
-
"unlocked_by":
|
257
|
-
"uuid": "
|
248
|
+
"unlocked_by": null,
|
249
|
+
"uuid": "b4f6b08b-a132-447b-b447-66bf37ab20c6"
|
258
250
|
},
|
259
251
|
{
|
260
|
-
"core":
|
252
|
+
"core": true,
|
261
253
|
"difficulty": 1,
|
262
|
-
"slug": "
|
254
|
+
"slug": "etl",
|
263
255
|
"topics": [
|
264
|
-
"
|
256
|
+
"control-flow-(loops)",
|
257
|
+
"maps",
|
258
|
+
"transforming"
|
265
259
|
],
|
266
|
-
"unlocked_by":
|
267
|
-
"uuid": "
|
260
|
+
"unlocked_by": null,
|
261
|
+
"uuid": "73da448c-33b7-4565-ab48-1de5020d65ab"
|
268
262
|
},
|
269
263
|
{
|
270
|
-
"core":
|
264
|
+
"core": true,
|
271
265
|
"difficulty": 1,
|
272
|
-
"slug": "
|
273
|
-
"topics": [
|
274
|
-
"lists"
|
275
|
-
],
|
276
|
-
"unlocked_by": "raindrops",
|
277
|
-
"uuid": "fb03948c-11e8-440d-9a5d-979396451270"
|
278
|
-
},
|
279
|
-
{
|
280
|
-
"core": false,
|
281
|
-
"difficulty": 2,
|
282
|
-
"slug": "pangram",
|
266
|
+
"slug": "scrabble-score",
|
283
267
|
"topics": [
|
284
268
|
"control-flow-(loops)",
|
269
|
+
"maps",
|
285
270
|
"strings"
|
286
271
|
],
|
287
|
-
"unlocked_by":
|
288
|
-
"uuid": "
|
289
|
-
},
|
290
|
-
{
|
291
|
-
"core": false,
|
292
|
-
"difficulty": 2,
|
293
|
-
"slug": "bob",
|
294
|
-
"topics": [
|
295
|
-
"control-flow-(conditionals)",
|
296
|
-
"strings"
|
297
|
-
],
|
298
|
-
"unlocked_by": "raindrops",
|
299
|
-
"uuid": "efdf07a1-e329-4d0f-90a1-374b9b8af748"
|
300
|
-
},
|
301
|
-
{
|
302
|
-
"core": false,
|
303
|
-
"difficulty": 5,
|
304
|
-
"slug": "error-handling",
|
305
|
-
"topics": [
|
306
|
-
"exception-handling"
|
307
|
-
],
|
308
|
-
"unlocked_by": "queen-attack",
|
309
|
-
"uuid": "cd05b63b-df20-4c8d-8743-53033acf7696"
|
310
|
-
},
|
311
|
-
{
|
312
|
-
"core": false,
|
313
|
-
"difficulty": 5,
|
314
|
-
"slug": "secret-handshake",
|
315
|
-
"topics": [
|
316
|
-
"arrays",
|
317
|
-
"bitwise-operations",
|
318
|
-
"integers"
|
319
|
-
],
|
320
|
-
"unlocked_by": "grains",
|
321
|
-
"uuid": "9a1870e0-dce7-496e-9521-2f2b606ac6c5"
|
272
|
+
"unlocked_by": null,
|
273
|
+
"uuid": "20cbd8f9-f8e3-4767-a0f5-94810ba3f902"
|
322
274
|
},
|
323
275
|
{
|
324
|
-
"core":
|
325
|
-
"difficulty":
|
326
|
-
"slug": "
|
276
|
+
"core": true,
|
277
|
+
"difficulty": 3,
|
278
|
+
"slug": "parallel-letter-frequency",
|
327
279
|
"topics": [
|
328
|
-
"
|
329
|
-
"strings",
|
330
|
-
"text-formatting"
|
280
|
+
"concurrency"
|
331
281
|
],
|
332
|
-
"unlocked_by":
|
333
|
-
"uuid": "
|
282
|
+
"unlocked_by": null,
|
283
|
+
"uuid": "bf366b19-63bf-4a75-9a35-08b881af6951"
|
334
284
|
},
|
335
285
|
{
|
336
286
|
"core": false,
|
@@ -501,6 +451,17 @@
|
|
501
451
|
"unlocked_by": "scrabble-score",
|
502
452
|
"uuid": "f1db7190-a53d-411d-b538-8dc3f75ddc32"
|
503
453
|
},
|
454
|
+
{
|
455
|
+
"core": true,
|
456
|
+
"difficulty": 3,
|
457
|
+
"slug": "word-count",
|
458
|
+
"topics": [
|
459
|
+
"sorting",
|
460
|
+
"strings"
|
461
|
+
],
|
462
|
+
"unlocked_by": null,
|
463
|
+
"uuid": "b765fde9-84b4-44cc-bdf1-f66ac1ab8e2c"
|
464
|
+
},
|
504
465
|
{
|
505
466
|
"core": false,
|
506
467
|
"difficulty": 4,
|
@@ -630,6 +591,18 @@
|
|
630
591
|
"unlocked_by": "etl",
|
631
592
|
"uuid": "458053ea-43a9-409f-a1a6-a7f31329aca4"
|
632
593
|
},
|
594
|
+
{
|
595
|
+
"core": true,
|
596
|
+
"difficulty": 2,
|
597
|
+
"slug": "strain",
|
598
|
+
"topics": [
|
599
|
+
"arrays",
|
600
|
+
"control-flow-(loops)",
|
601
|
+
"filtering"
|
602
|
+
],
|
603
|
+
"unlocked_by": null,
|
604
|
+
"uuid": "7fbb0d9d-71d1-4654-8ca0-bb07ddbe6cb5"
|
605
|
+
},
|
633
606
|
{
|
634
607
|
"core": false,
|
635
608
|
"difficulty": 4,
|
@@ -752,6 +725,20 @@
|
|
752
725
|
"unlocked_by": "word-count",
|
753
726
|
"uuid": "aa598f3e-9d2b-4f9f-8c14-46e0ac27d5be"
|
754
727
|
},
|
728
|
+
{
|
729
|
+
"core": true,
|
730
|
+
"difficulty": 4,
|
731
|
+
"slug": "matrix",
|
732
|
+
"topics": [
|
733
|
+
"arrays",
|
734
|
+
"exception-handling",
|
735
|
+
"matrices",
|
736
|
+
"strings",
|
737
|
+
"type-conversion"
|
738
|
+
],
|
739
|
+
"unlocked_by": null,
|
740
|
+
"uuid": "62aa3d20-65d8-440f-9d08-48bbc823f4fe"
|
741
|
+
},
|
755
742
|
{
|
756
743
|
"core": false,
|
757
744
|
"difficulty": 5,
|
@@ -778,6 +765,19 @@
|
|
778
765
|
"unlocked_by": "roman-numerals",
|
779
766
|
"uuid": "fcf735fe-a659-40ae-858e-6d1e834a4faf"
|
780
767
|
},
|
768
|
+
{
|
769
|
+
"core": true,
|
770
|
+
"difficulty": 5,
|
771
|
+
"slug": "binary-search",
|
772
|
+
"topics": [
|
773
|
+
"algorithms",
|
774
|
+
"arrays",
|
775
|
+
"searching",
|
776
|
+
"sorting"
|
777
|
+
],
|
778
|
+
"unlocked_by": null,
|
779
|
+
"uuid": "31c77516-6702-417e-9c6e-19c7e965d513"
|
780
|
+
},
|
781
781
|
{
|
782
782
|
"core": false,
|
783
783
|
"difficulty": 5,
|
@@ -1056,4 +1056,4 @@
|
|
1056
1056
|
],
|
1057
1057
|
"ignore_pattern": "example(?!.*test)",
|
1058
1058
|
"language": "Go"
|
1059
|
-
}
|
1059
|
+
}
|