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.
Files changed (113) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/problem-specifications/TOPICS.txt +8 -1
  4. data/tracks/c/docs/SNIPPET.txt +11 -0
  5. data/tracks/ceylon/docs/SNIPPET.txt +3 -0
  6. data/tracks/clojure/docs/SNIPPET.txt +5 -0
  7. data/tracks/csharp/build.cake +23 -16
  8. data/tracks/csharp/build.ps1 +1 -1
  9. data/tracks/csharp/build.sh +1 -1
  10. data/tracks/csharp/exercises/pangram/PangramTest.cs +9 -18
  11. data/tracks/csharp/generators/.gitignore +2 -1
  12. data/tracks/csharp/generators/Exercise.cs +11 -12
  13. data/tracks/csharp/generators/Exercises/AllYourBase.cs +2 -2
  14. data/tracks/csharp/generators/Exercises/Allergies.cs +1 -1
  15. data/tracks/csharp/generators/Exercises/Alphametics.cs +1 -1
  16. data/tracks/csharp/generators/Exercises/Anagram.cs +1 -1
  17. data/tracks/csharp/generators/Exercises/BeerSong.cs +1 -1
  18. data/tracks/csharp/generators/Exercises/BinarySearch.cs +1 -1
  19. data/tracks/csharp/generators/Exercises/BookStore.cs +1 -1
  20. data/tracks/csharp/generators/Exercises/BracketPush.cs +1 -1
  21. data/tracks/csharp/generators/Exercises/CollatzConjecture.cs +2 -2
  22. data/tracks/csharp/generators/Exercises/CryptoSquare.cs +1 -1
  23. data/tracks/csharp/generators/Exercises/FoodChain.cs +1 -1
  24. data/tracks/csharp/generators/Exercises/Gigasecond.cs +1 -1
  25. data/tracks/csharp/generators/Exercises/Hamming.cs +1 -1
  26. data/tracks/csharp/generators/Exercises/House.cs +1 -1
  27. data/tracks/csharp/generators/Exercises/Leap.cs +1 -1
  28. data/tracks/csharp/generators/Exercises/Luhn.cs +1 -1
  29. data/tracks/csharp/generators/Exercises/NthPrime.cs +1 -1
  30. data/tracks/csharp/generators/Exercises/Pangram.cs +1 -11
  31. data/tracks/csharp/generators/Exercises/PerfectNumbers.cs +1 -1
  32. data/tracks/csharp/generators/Exercises/PhoneNumber.cs +1 -1
  33. data/tracks/csharp/generators/Exercises/RailFenceCipher.cs +1 -1
  34. data/tracks/csharp/generators/Exercises/RnaTranscription.cs +1 -1
  35. data/tracks/csharp/generators/Exercises/RomanNumerals.cs +1 -1
  36. data/tracks/csharp/generators/Exercises/RunLengthEncoding.cs +1 -1
  37. data/tracks/csharp/generators/Exercises/Say.cs +2 -7
  38. data/tracks/csharp/generators/Exercises/SecretHandshake.cs +1 -1
  39. data/tracks/csharp/generators/Exercises/Sieve.cs +1 -1
  40. data/tracks/csharp/generators/Exercises/SpaceAge.cs +1 -1
  41. data/tracks/csharp/generators/Exercises/SumOfMultiples.cs +1 -1
  42. data/tracks/csharp/generators/Exercises/Transpose.cs +1 -1
  43. data/tracks/csharp/generators/Exercises/WordCount.cs +1 -1
  44. data/tracks/csharp/generators/Exercises/Wordy.cs +1 -1
  45. data/tracks/csharp/generators/Output/FormattingExtensions.cs +4 -2
  46. data/tracks/csharp/generators/Output/ValueFormatter.cs +1 -1
  47. data/tracks/delphi/docs/SNIPPET.txt +6 -13
  48. data/tracks/ecmascript/docs/SNIPPET.txt +7 -0
  49. data/tracks/elisp/docs/SNIPPET.txt +13 -0
  50. data/tracks/elixir/config.json +2 -2
  51. data/tracks/elixir/docs/SNIPPET.txt +10 -0
  52. data/tracks/erlang/docs/SNIPPET.txt +8 -0
  53. data/tracks/fsharp/docs/SNIPPET.txt +3 -0
  54. data/tracks/go/config.json +174 -174
  55. data/tracks/go/config/maintainers.json +6 -9
  56. data/tracks/go/docs/SNIPPET.txt +6 -0
  57. data/tracks/groovy/config.json +4 -4
  58. data/tracks/groovy/docs/SNIPPET.txt +12 -0
  59. data/tracks/haskell/config.json +2 -0
  60. data/tracks/haskell/docs/SNIPPET.txt +4 -0
  61. data/tracks/java/docs/SNIPPET.txt +7 -0
  62. data/tracks/java/exercises/robot-simulator/src/example/java/GridPosition.java +21 -16
  63. data/tracks/java/exercises/robot-simulator/src/test/java/RobotTest.java +24 -24
  64. data/tracks/javascript/docs/SNIPPET.txt +10 -0
  65. data/tracks/kotlin/docs/SNIPPET.txt +3 -0
  66. data/tracks/kotlin/exercises/change/src/example/kotlin/ChangeCalculator.kt +35 -0
  67. data/tracks/kotlin/exercises/change/src/test/kotlin/ChangeCalculatorTest.kt +105 -0
  68. data/tracks/lfe/docs/SNIPPET.txt +12 -0
  69. data/tracks/lua/docs/SNIPPET.txt +7 -0
  70. data/tracks/mips/docs/SNIPPET.txt +23 -0
  71. data/tracks/ocaml/docs/SNIPPET.txt +1 -0
  72. data/tracks/purescript/config.json +1 -1
  73. data/tracks/purescript/docs/SNIPPET.txt +8 -0
  74. data/tracks/python/exercises/saddle-points/README.md +1 -1
  75. data/tracks/racket/docs/SNIPPET.txt +6 -0
  76. data/tracks/ruby/docs/SNIPPET.txt +5 -0
  77. data/tracks/rust/docs/SNIPPET.txt +3 -0
  78. data/tracks/scala/docs/SNIPPET.txt +4 -0
  79. data/tracks/scala/exercises/ocr-numbers/example.scala +17 -11
  80. data/tracks/scala/exercises/ocr-numbers/src/test/scala/OcrNumbersTest.scala +153 -0
  81. data/tracks/scala/exercises/pig-latin/example.scala +11 -6
  82. data/tracks/scala/exercises/pig-latin/src/test/scala/PigLatinTest.scala +80 -10
  83. data/tracks/scala/testgen/src/main/scala/OcrNumbersTestGenerator.scala +34 -0
  84. data/tracks/scala/testgen/src/main/scala/PigLatinTestGenerator.scala +16 -0
  85. data/tracks/scheme/docs/SNIPPET.txt +7 -0
  86. data/tracks/sml/bin/generate +277 -0
  87. data/tracks/sml/config.json +30 -0
  88. data/tracks/sml/docs/ABOUT.md +32 -0
  89. data/tracks/sml/docs/LEARNING.md +37 -0
  90. data/tracks/sml/docs/SNIPPET.txt +3 -0
  91. data/tracks/sml/exercises/bob/README.md +48 -0
  92. data/tracks/sml/exercises/bob/bob.sml +2 -0
  93. data/tracks/sml/exercises/bob/example.sml +22 -0
  94. data/tracks/sml/exercises/bob/test.sml +87 -0
  95. data/tracks/sml/exercises/bob/testlib.sml +159 -0
  96. data/tracks/sml/exercises/difference-of-squares/README.md +49 -0
  97. data/tracks/sml/exercises/difference-of-squares/difference-of-squares.sml +8 -0
  98. data/tracks/sml/exercises/difference-of-squares/example.sml +11 -0
  99. data/tracks/sml/exercises/difference-of-squares/test.sml +45 -0
  100. data/tracks/sml/exercises/difference-of-squares/testlib.sml +159 -0
  101. data/tracks/sml/exercises/hello-world/README.md +51 -0
  102. data/tracks/sml/exercises/hello-world/example.sml +1 -0
  103. data/tracks/sml/exercises/hello-world/hello-world.sml +2 -0
  104. data/tracks/sml/exercises/hello-world/test.sml +15 -0
  105. data/tracks/sml/exercises/hello-world/testlib.sml +159 -0
  106. data/tracks/sml/lib/testlib.sml +159 -0
  107. data/tracks/swift/docs/SNIPPET.txt +9 -0
  108. data/tracks/typescript/docs/SNIPPET.txt +8 -0
  109. metadata +53 -6
  110. data/tracks/csharp/generators/Generators.csproj.user +0 -6
  111. data/tracks/kotlin/exercises/change/src/example/kotlin/Change.kt +0 -70
  112. data/tracks/kotlin/exercises/change/src/test/kotlin/ChangeTest.kt +0 -55
  113. 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 CanonicalData.Cases)
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 CanonicalData.Cases)
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 CanonicalData.Cases)
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 CanonicalData.Cases)
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
- using Generators.Input;
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 CanonicalData.Cases)
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 CanonicalData.Cases)
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 CanonicalData.Cases)
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 CanonicalData.Cases)
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 CanonicalData.Cases)
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 CanonicalData.Cases)
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 CanonicalData.Cases)
10
+ foreach (var canonicalDataCase in canonicalData.Cases)
11
11
  {
12
- // Rename the property to avoid it being considered a constructor
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 CanonicalData.Cases)
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 CanonicalData.Cases)
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 CanonicalData.Cases)
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 CanonicalData.Cases)
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 CanonicalData.Cases)
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 CanonicalData.Cases)
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 CanonicalData.Cases)
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 EscapeControlCharacters(this string s)
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.EscapeControlCharacters().Quote();
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
- unit uHelloWorld;
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
- result := 'Hello, World!';
12
- end;
13
-
14
- end.
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,7 @@
1
+ class HelloWorld {
2
+ hello() {
3
+ return 'Hello, World!';
4
+ }
5
+ }
6
+
7
+ export default HelloWorld;
@@ -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
@@ -84,7 +84,7 @@
84
84
  "difficulty": 2,
85
85
  "topics": [
86
86
  "pattern matching",
87
- "math"
87
+ "mathematics"
88
88
  ]
89
89
  },
90
90
  {
@@ -595,7 +595,7 @@
595
595
  "unlocked_by": null,
596
596
  "difficulty": 4,
597
597
  "topics": [
598
- "math"
598
+ "mathematics"
599
599
  ]
600
600
  },
601
601
  {
@@ -0,0 +1,10 @@
1
+ defmodule HelloWorld do
2
+
3
+ @doc """
4
+ Greets the user by name, or by saying
5
+ "Hello, World!" if no name is given
6
+ """
7
+ def hello(name \\ "World") do
8
+ "Hello, #{name}!"
9
+ end
10
+ end
@@ -0,0 +1,8 @@
1
+ -module(example).
2
+ -export([hello/0, test_version/0]).
3
+
4
+ hello() ->
5
+ "Hello, World!".
6
+
7
+ test_version() ->
8
+ 2.
@@ -0,0 +1,3 @@
1
+ module HelloWorld
2
+
3
+ let hello = "Hello, World!"
@@ -24,75 +24,74 @@
24
24
  "uuid": "dc4ad67d-0fe4-0880-5a13-3aebb8759bcc3095de1"
25
25
  },
26
26
  {
27
- "core": true,
27
+ "core": false,
28
28
  "difficulty": 1,
29
- "slug": "hamming",
29
+ "slug": "leap",
30
30
  "topics": [
31
- "control-flow-(loops)",
32
- "equality",
33
- "strings"
31
+ "booleans",
32
+ "control-flow-(conditionals)",
33
+ "integers",
34
+ "logic"
34
35
  ],
35
- "unlocked_by": null,
36
- "uuid": "52582415-8f7f-4ac5-857f-5c160ec48134"
36
+ "unlocked_by": "hamming",
37
+ "uuid": "fee57b09-2b67-4483-a2e5-3dfec0568b15"
37
38
  },
38
39
  {
39
40
  "core": true,
40
- "difficulty": 1,
41
- "slug": "raindrops",
41
+ "difficulty": 3,
42
+ "slug": "clock",
42
43
  "topics": [
43
- "control-flow-(conditionals)",
44
- "filtering",
45
- "strings"
44
+ "equality",
45
+ "mathematics",
46
+ "text-formatting",
47
+ "time"
46
48
  ],
47
49
  "unlocked_by": null,
48
- "uuid": "2f51e32a-9b1f-4100-9eec-517115c858e9"
50
+ "uuid": "7d2de21e-bf67-495e-8d90-05e1a35d5b99"
49
51
  },
50
52
  {
51
- "core": true,
53
+ "core": false,
52
54
  "difficulty": 1,
53
- "slug": "scrabble-score",
55
+ "slug": "gigasecond",
54
56
  "topics": [
55
- "control-flow-(loops)",
56
- "maps",
57
- "strings"
57
+ "time"
58
58
  ],
59
- "unlocked_by": null,
60
- "uuid": "20cbd8f9-f8e3-4767-a0f5-94810ba3f902"
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": "etl",
65
+ "slug": "hamming",
66
66
  "topics": [
67
67
  "control-flow-(loops)",
68
- "maps",
69
- "transforming"
68
+ "equality",
69
+ "strings"
70
70
  ],
71
71
  "unlocked_by": null,
72
- "uuid": "73da448c-33b7-4565-ab48-1de5020d65ab"
72
+ "uuid": "52582415-8f7f-4ac5-857f-5c160ec48134"
73
73
  },
74
74
  {
75
75
  "core": true,
76
- "difficulty": 2,
77
- "slug": "difference-of-squares",
76
+ "difficulty": 1,
77
+ "slug": "raindrops",
78
78
  "topics": [
79
- "algorithms",
80
- "mathematics"
79
+ "control-flow-(conditionals)",
80
+ "filtering",
81
+ "strings"
81
82
  ],
82
83
  "unlocked_by": null,
83
- "uuid": "19628c8a-a89f-457e-9526-3d400024a927"
84
+ "uuid": "2f51e32a-9b1f-4100-9eec-517115c858e9"
84
85
  },
85
86
  {
86
- "core": true,
87
- "difficulty": 2,
88
- "slug": "strain",
87
+ "core": false,
88
+ "difficulty": 1,
89
+ "slug": "accumulate",
89
90
  "topics": [
90
- "arrays",
91
- "control-flow-(loops)",
92
- "filtering"
91
+ "lists"
93
92
  ],
94
- "unlocked_by": null,
95
- "uuid": "7fbb0d9d-71d1-4654-8ca0-bb07ddbe6cb5"
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": true,
111
- "difficulty": 3,
112
- "slug": "triangle",
109
+ "core": false,
110
+ "difficulty": 2,
111
+ "slug": "pangram",
113
112
  "topics": [
114
- "booleans",
115
- "control-flow-(conditionals)",
116
- "logic"
113
+ "control-flow-(loops)",
114
+ "strings"
117
115
  ],
118
- "unlocked_by": null,
119
- "uuid": "6769557a-33fa-4257-adbf-e66dc8c06f85"
116
+ "unlocked_by": "raindrops",
117
+ "uuid": "d14c6283-e57c-472c-8181-87f82d9088dd"
120
118
  },
121
119
  {
122
- "core": true,
123
- "difficulty": 3,
124
- "slug": "clock",
120
+ "core": false,
121
+ "difficulty": 2,
122
+ "slug": "bob",
125
123
  "topics": [
126
- "equality",
127
- "mathematics",
128
- "text-formatting",
129
- "time"
124
+ "control-flow-(conditionals)",
125
+ "strings"
130
126
  ],
131
- "unlocked_by": null,
132
- "uuid": "7d2de21e-bf67-495e-8d90-05e1a35d5b99"
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": "word-count",
133
+ "slug": "triangle",
138
134
  "topics": [
139
- "sorting",
140
- "strings"
135
+ "booleans",
136
+ "control-flow-(conditionals)",
137
+ "logic"
141
138
  ],
142
139
  "unlocked_by": null,
143
- "uuid": "b765fde9-84b4-44cc-bdf1-f66ac1ab8e2c"
140
+ "uuid": "6769557a-33fa-4257-adbf-e66dc8c06f85"
144
141
  },
145
142
  {
146
143
  "core": true,
147
- "difficulty": 3,
148
- "slug": "parallel-letter-frequency",
144
+ "difficulty": 4,
145
+ "slug": "twelve-days",
149
146
  "topics": [
150
- "concurrency"
147
+ "algorithms",
148
+ "pattern-recognition",
149
+ "sequences",
150
+ "strings",
151
+ "text-formatting"
151
152
  ],
152
153
  "unlocked_by": null,
153
- "uuid": "bf366b19-63bf-4a75-9a35-08b881af6951"
154
+ "uuid": "75b6e2e8-1e20-4f53-b7c5-e32f9f7eea58"
154
155
  },
155
156
  {
156
157
  "core": true,
157
158
  "difficulty": 2,
158
- "slug": "grains",
159
+ "slug": "difference-of-squares",
159
160
  "topics": [
160
- "bitwise-operations",
161
- "control-flow-(if-else-statements)",
162
- "integers",
163
- "mathematics",
164
- "type-conversion"
161
+ "algorithms",
162
+ "mathematics"
165
163
  ],
166
164
  "unlocked_by": null,
167
- "uuid": "b4f6b08b-a132-447b-b447-66bf37ab20c6"
165
+ "uuid": "19628c8a-a89f-457e-9526-3d400024a927"
168
166
  },
169
167
  {
170
- "core": true,
171
- "difficulty": 3,
172
- "slug": "series",
168
+ "core": false,
169
+ "difficulty": 5,
170
+ "slug": "error-handling",
173
171
  "topics": [
174
- "arrays",
175
- "refactoring",
176
- "strings"
172
+ "exception-handling"
177
173
  ],
178
- "unlocked_by": null,
179
- "uuid": "2c5fb577-a9ce-4c4c-8fc8-fffb38d020d6"
174
+ "unlocked_by": "queen-attack",
175
+ "uuid": "cd05b63b-df20-4c8d-8743-53033acf7696"
180
176
  },
181
177
  {
182
- "core": true,
178
+ "core": false,
183
179
  "difficulty": 5,
184
- "slug": "binary-search",
180
+ "slug": "secret-handshake",
185
181
  "topics": [
186
- "algorithms",
187
182
  "arrays",
188
- "searching",
189
- "sorting"
183
+ "bitwise-operations",
184
+ "integers"
190
185
  ],
191
- "unlocked_by": null,
192
- "uuid": "31c77516-6702-417e-9c6e-19c7e965d513"
186
+ "unlocked_by": "grains",
187
+ "uuid": "9a1870e0-dce7-496e-9521-2f2b606ac6c5"
193
188
  },
194
189
  {
195
- "core": true,
190
+ "core": false,
196
191
  "difficulty": 4,
197
- "slug": "twelve-days",
192
+ "slug": "house",
198
193
  "topics": [
199
- "algorithms",
200
- "pattern-recognition",
201
- "sequences",
194
+ "recursion",
202
195
  "strings",
203
196
  "text-formatting"
204
197
  ],
205
- "unlocked_by": null,
206
- "uuid": "75b6e2e8-1e20-4f53-b7c5-e32f9f7eea58"
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": false,
248
- "difficulty": 1,
249
- "slug": "leap",
238
+ "core": true,
239
+ "difficulty": 2,
240
+ "slug": "grains",
250
241
  "topics": [
251
- "booleans",
252
- "control-flow-(conditionals)",
242
+ "bitwise-operations",
243
+ "control-flow-(if-else-statements)",
253
244
  "integers",
254
- "logic"
245
+ "mathematics",
246
+ "type-conversion"
255
247
  ],
256
- "unlocked_by": "hamming",
257
- "uuid": "fee57b09-2b67-4483-a2e5-3dfec0568b15"
248
+ "unlocked_by": null,
249
+ "uuid": "b4f6b08b-a132-447b-b447-66bf37ab20c6"
258
250
  },
259
251
  {
260
- "core": false,
252
+ "core": true,
261
253
  "difficulty": 1,
262
- "slug": "gigasecond",
254
+ "slug": "etl",
263
255
  "topics": [
264
- "time"
256
+ "control-flow-(loops)",
257
+ "maps",
258
+ "transforming"
265
259
  ],
266
- "unlocked_by": "hamming",
267
- "uuid": "ea390e58-6ac5-4219-89bb-648852712a6a"
260
+ "unlocked_by": null,
261
+ "uuid": "73da448c-33b7-4565-ab48-1de5020d65ab"
268
262
  },
269
263
  {
270
- "core": false,
264
+ "core": true,
271
265
  "difficulty": 1,
272
- "slug": "accumulate",
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": "raindrops",
288
- "uuid": "d14c6283-e57c-472c-8181-87f82d9088dd"
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": false,
325
- "difficulty": 4,
326
- "slug": "house",
276
+ "core": true,
277
+ "difficulty": 3,
278
+ "slug": "parallel-letter-frequency",
327
279
  "topics": [
328
- "recursion",
329
- "strings",
330
- "text-formatting"
280
+ "concurrency"
331
281
  ],
332
- "unlocked_by": "twelve-days",
333
- "uuid": "11008fb0-4ef9-4aff-befb-c56f4084f96e"
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
+ }