trackler 2.2.1.136 → 2.2.1.137

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 699eec34e75cdaa468a3ce1c7a3886760cf01a6a
4
- data.tar.gz: e4eba91c00477ab11723b6ab763fddc63a8d96e5
3
+ metadata.gz: 60bf2574faa34a60a9794b94d789c9e73fb4cbe1
4
+ data.tar.gz: 40a8dc9eaba4aae1b7dacc47d7f7df71c2ad0ef5
5
5
  SHA512:
6
- metadata.gz: f33e6a32dbb9cbde60a28160521ffe29f85855f0ccdc367576bf22167b2588dd267f38067773cec141423efe21314cb22ac6dea70e51b288df5d7ddef29d3468
7
- data.tar.gz: a8edb8f1fac25c9f7fd9520803b22cbb6711d1741637c84fe0842e0544365610fdbc87d1d8e4a8a95eb81f0643b5a4534d057cdff14184cabf9a9f57c50635e0
6
+ metadata.gz: 2f84292883fa84fe0e3531f411e790247ea3f405a2ac4073b19e2330952b6e088598c41f900d47c79bf7ebb3445b624f639fd11b3a660e60c08d829afe223d71
7
+ data.tar.gz: 62435ae5728a1ff10a08382ea7a11c43985d97f5842a33ea1b27923c43c2a90fba640ccd42e3f71228a7a5ab9b1cf3b253260d93537d8f8201b7150b83991925
@@ -1,3 +1,3 @@
1
1
  module Trackler
2
- VERSION = "2.2.1.136"
2
+ VERSION = "2.2.1.137"
3
3
  end
@@ -1,18 +1,16 @@
1
- using System.Linq;
1
+ using System;
2
+ using System.Linq;
2
3
 
3
4
  public static class Proverb
4
5
  {
5
- private static readonly string[] Subjects = { "nail", "shoe", "horse", "rider", "message", "battle", "kingdom" };
6
-
7
- public static string Line(int line)
6
+ public static string[] Recite(string[] subjects)
8
7
  {
9
- if (line == 7)
10
- {
11
- return "And all for the want of a horseshoe nail.";
12
- }
8
+ Func<int, string> line = (lineIndex) =>
9
+ {
10
+ if (lineIndex == subjects.Length) return $"And all for the want of a {subjects[0]}.";
11
+ else return $"For want of a {subjects[lineIndex - 1]} the {subjects[lineIndex]} was lost.";
12
+ };
13
13
 
14
- return $"For want of a {Subjects[line - 1]} the {Subjects[line]} was lost.";
14
+ return Enumerable.Range(1, subjects.Length).Select(line).ToArray();
15
15
  }
16
-
17
- public static string AllLines() => string.Join("\n", Enumerable.Range(1, 7).Select(Line));
18
16
  }
@@ -2,12 +2,7 @@
2
2
 
3
3
  public static class Proverb
4
4
  {
5
- public static string Line(int line)
6
- {
7
- throw new NotImplementedException();
8
- }
9
-
10
- public static string AllLines()
5
+ public static string[] Recite(string[] subjects)
11
6
  {
12
7
  throw new NotImplementedException();
13
8
  }
@@ -1,36 +1,42 @@
1
- using Xunit;
1
+ // This file was auto-generated based on version 1.1.0 of the canonical data.
2
+
3
+ using Xunit;
2
4
 
3
5
  public class ProverbTest
4
6
  {
5
7
  [Fact]
6
- public void Line_one()
8
+ public void Zero_pieces()
9
+ {
10
+ Assert.Empty(Proverb.Recite(new string[] { }));
11
+ }
12
+
13
+ [Fact(Skip = "Remove to run test")]
14
+ public void One_piece()
7
15
  {
8
- Assert.Equal("For want of a nail the shoe was lost.", Proverb.Line(1));
16
+ Assert.Equal(new[] { "And all for the want of a nail." }, Proverb.Recite(new[] { "nail" }));
9
17
  }
10
18
 
11
19
  [Fact(Skip = "Remove to run test")]
12
- public void Line_four()
20
+ public void Two_pieces()
13
21
  {
14
- Assert.Equal("For want of a rider the message was lost.", Proverb.Line(4));
22
+ Assert.Equal(new[] { "For want of a nail the shoe was lost.", "And all for the want of a nail." }, Proverb.Recite(new[] { "nail", "shoe" }));
15
23
  }
16
24
 
17
25
  [Fact(Skip = "Remove to run test")]
18
- public void Line_seven()
26
+ public void Three_pieces()
19
27
  {
20
- Assert.Equal("And all for the want of a horseshoe nail.", Proverb.Line(7));
28
+ Assert.Equal(new[] { "For want of a nail the shoe was lost.", "For want of a shoe the horse was lost.", "And all for the want of a nail." }, Proverb.Recite(new[] { "nail", "shoe", "horse" }));
21
29
  }
22
30
 
23
31
  [Fact(Skip = "Remove to run test")]
24
- public void All_lines()
32
+ public void Full_proverb()
25
33
  {
26
- const string expected = "For want of a nail the shoe was lost.\n" +
27
- "For want of a shoe the horse was lost.\n" +
28
- "For want of a horse the rider was lost.\n" +
29
- "For want of a rider the message was lost.\n" +
30
- "For want of a message the battle was lost.\n" +
31
- "For want of a battle the kingdom was lost.\n" +
32
- "And all for the want of a horseshoe nail.";
34
+ Assert.Equal(new[] { "For want of a nail the shoe was lost.", "For want of a shoe the horse was lost.", "For want of a horse the rider was lost.", "For want of a rider the message was lost.", "For want of a message the battle was lost.", "For want of a battle the kingdom was lost.", "And all for the want of a nail." }, Proverb.Recite(new[] { "nail", "shoe", "horse", "rider", "message", "battle", "kingdom" }));
35
+ }
33
36
 
34
- Assert.Equal(expected, Proverb.AllLines());
37
+ [Fact(Skip = "Remove to run test")]
38
+ public void Four_pieces_modernized()
39
+ {
40
+ Assert.Equal(new[] { "For want of a pin the gun was lost.", "For want of a gun the soldier was lost.", "For want of a soldier the battle was lost.", "And all for the want of a pin." }, Proverb.Recite(new[] { "pin", "gun", "soldier", "battle" }));
35
41
  }
36
- }
42
+ }
@@ -0,0 +1,9 @@
1
+ namespace Generators
2
+ {
3
+ public sealed class DeprecatedExercise : Exercise
4
+ {
5
+ public DeprecatedExercise(string name) => Name = name;
6
+
7
+ public override string Name { get; }
8
+ }
9
+ }
@@ -29,9 +29,12 @@ namespace Generators
29
29
 
30
30
  private IEnumerable<Exercise> GetExercises()
31
31
  {
32
- foreach (var exerciseName in ConfigFile.GetExerciseNames())
32
+ foreach (var exercise in ConfigFile.GetExercises())
33
33
  {
34
- if (HasNoCanonicalData(exerciseName))
34
+ var exerciseName = exercise.Name;
35
+ if (exercise.Deprecated)
36
+ yield return new DeprecatedExercise(exerciseName);
37
+ else if (HasNoCanonicalData(exerciseName))
35
38
  yield return new MissingDataExercise(exerciseName);
36
39
  else if (IsNotImplemented(exerciseName))
37
40
  yield return new UnimplementedExercise(exerciseName);
@@ -0,0 +1,16 @@
1
+ using Generators.Output;
2
+
3
+ namespace Generators.Exercises
4
+ {
5
+ public class Proverb : GeneratorExercise
6
+ {
7
+ protected override string RenderTestMethodBodyAssert(TestMethodBody testMethodBody)
8
+ {
9
+ if (testMethodBody.CanonicalDataCase.Properties["input"]["strings"] as string[] == null)
10
+ {
11
+ return TemplateRenderer.RenderInline("Assert.Empty(Proverb.Recite(new string[] { }));", new { });
12
+ }
13
+ return base.RenderTestMethodBodyAssert(testMethodBody);
14
+ }
15
+ }
16
+ }
@@ -2,6 +2,7 @@
2
2
  using System.IO;
3
3
  using System.Linq;
4
4
  using Newtonsoft.Json;
5
+ using Generators.Output;
5
6
 
6
7
  namespace Generators.Input
7
8
  {
@@ -9,11 +10,11 @@ namespace Generators.Input
9
10
  {
10
11
  private const string ConfigFilePath = "../config.json";
11
12
 
12
- public static IEnumerable<string> GetExerciseNames()
13
+ public static IEnumerable<ConfigExercise> GetExercises()
13
14
  {
14
15
  var jsonContents = File.ReadAllText(ConfigFilePath);
15
16
  var config = JsonConvert.DeserializeObject<Config>(jsonContents);
16
- return config.Exercises.Select(exercise => exercise.Slug).OrderBy(x => x).ToArray();
17
+ return config.Exercises.OrderBy(x => x.Name).ToArray();
17
18
  }
18
19
 
19
20
  private class Config
@@ -21,9 +22,16 @@ namespace Generators.Input
21
22
  public ConfigExercise[] Exercises { get; set; }
22
23
  }
23
24
 
24
- private class ConfigExercise
25
+ public class ConfigExercise
25
26
  {
27
+ public string Name => Slug.ToExerciseName();
26
28
  public string Slug { get; set; }
29
+ public bool Core { get; set; }
30
+ public int Difficulty { get; set; }
31
+ public string[] Topics { get; set; }
32
+ public string Unlocked_By { get; set; }
33
+ public string UUID { get; set; }
34
+ public bool Deprecated { get; set; }
27
35
  }
28
36
  }
29
37
  }
@@ -158,6 +158,19 @@
158
158
  "filtering",
159
159
  "logic"
160
160
  ]
161
+ },
162
+ {
163
+ "uuid": "58bb800a-5b64-44bc-8282-77972b71e615",
164
+ "slug": "allergies",
165
+ "core": true,
166
+ "unlocked_by": null,
167
+ "difficulty": 1,
168
+ "topics": [
169
+ "classes",
170
+ "mathematics",
171
+ "bitwise_operations",
172
+ "enumerations"
173
+ ]
161
174
  }
162
175
  ]
163
176
  }
@@ -0,0 +1,47 @@
1
+ # Allergies
2
+
3
+ Given a person's allergy score, determine whether or not they're allergic to a given item, and their full list of allergies.
4
+
5
+ An allergy test produces a single numeric score which contains the
6
+ information about all the allergies the person has (that they were
7
+ tested for).
8
+
9
+ The list of items (and their value) that were tested are:
10
+
11
+ * eggs (1)
12
+ * peanuts (2)
13
+ * shellfish (4)
14
+ * strawberries (8)
15
+ * tomatoes (16)
16
+ * chocolate (32)
17
+ * pollen (64)
18
+ * cats (128)
19
+
20
+ So if Tom is allergic to peanuts and chocolate, he gets a score of 34.
21
+
22
+ Now, given just that score of 34, your program should be able to say:
23
+
24
+ - Whether Tom is allergic to any one of those allergens listed above.
25
+ - All the allergens Tom is allergic to.
26
+
27
+ Note: a given score may include allergens **not** listed above (i.e.
28
+ allergens that score 256, 512, 1024, etc.). Your program should
29
+ ignore those components of the score. For example, if the allergy
30
+ score is 257, your program should only report the eggs (1) allergy.
31
+
32
+ ## Submitting Exercises
33
+
34
+ Note that, when trying to submit an exercise, make sure the solution is in the `$EXERCISM_WORKSPACE/nim/allergies` directory.
35
+
36
+ You can find your Exercism workspace by running `exercism debug` and looking for the line that starts with `Workspace`.
37
+
38
+ For more detailed information about running tests, code style and linting,
39
+ please see the [help page](http://exercism.io/languages/nim).
40
+
41
+ ## Source
42
+
43
+ Jumpstart Lab Warm-up [http://jumpstartlab.com](http://jumpstartlab.com)
44
+
45
+ ## Submitting Incomplete Solutions
46
+
47
+ It's possible to submit an incomplete solution so you can see how others have completed the exercise.
@@ -0,0 +1,68 @@
1
+ import unittest
2
+
3
+ import allergies
4
+
5
+
6
+ test "no allergies means not allergic":
7
+ let allergies = Allergies(score: 0)
8
+ check allergies.is_allergic_to("peanuts") == false
9
+ check allergies.is_allergic_to("cats") == false
10
+ check allergies.is_allergic_to("strawberries") == false
11
+
12
+ test "is allergic to eggs":
13
+ let allergies = Allergies(score: 1)
14
+ check allergies.is_allergic_to("eggs") == true
15
+
16
+ test "allergic to eggs in addition to other stuff":
17
+ let allergies = Allergies(score: 5)
18
+ check allergies.is_allergic_to("eggs") == true
19
+ check allergies.is_allergic_to("shellfish") == true
20
+ check allergies.is_allergic_to("strawberries") == false
21
+
22
+ test "no allergies at all":
23
+ let allergies = Allergies(score: 0)
24
+ check allergies.lst == newSeq[string](0)
25
+
26
+ test "allergic to just eggs":
27
+ let allergies = Allergies(score: 1)
28
+ check allergies.lst == @["eggs"]
29
+
30
+ test "allergic to just peanuts":
31
+ let allergies = Allergies(score: 2)
32
+ check allergies.lst == @["peanuts"]
33
+
34
+ test "allergic to just strawberries":
35
+ let allergies = Allergies(score: 8)
36
+ check allergies.lst == @["strawberries"]
37
+
38
+ test "allergic to eggs and peanuts":
39
+ let allergies = Allergies(score: 3)
40
+ check allergies.lst == @["eggs", "peanuts"]
41
+
42
+ test "allergic to more than eggs but not peanuts":
43
+ let allergies = Allergies(score: 5)
44
+ check allergies.lst == @["eggs", "shellfish"]
45
+
46
+ test "allergic to lots of stuff":
47
+ let allergies = Allergies(score: 248)
48
+ check allergies.lst == @[
49
+ "strawberries", "tomatoes", "chocolate", "pollen", "cats"
50
+ ]
51
+
52
+ test "allergic to everything":
53
+ let allergies = Allergies(score: 255)
54
+ check allergies.lst == @[
55
+ "eggs", "peanuts", "shellfish", "strawberries", "tomatoes",
56
+ "chocolate", "pollen", "cats"
57
+ ]
58
+
59
+ test "ignore non allergen score parts only eggs":
60
+ let allergies = Allergies(score: 257)
61
+ check allergies.lst == @["eggs"]
62
+
63
+ test "ignore non allergen score parts":
64
+ let allergies = Allergies(score: 509)
65
+ check allergies.lst == @[
66
+ "eggs", "shellfish", "strawberries", "tomatoes", "chocolate",
67
+ "pollen", "cats"
68
+ ]
@@ -0,0 +1,24 @@
1
+ import sequtils
2
+
3
+ type
4
+ Allergies* = object
5
+ score*: int
6
+
7
+ var
8
+ allergiesList = [
9
+ "eggs",
10
+ "peanuts",
11
+ "shellfish",
12
+ "strawberries",
13
+ "tomatoes",
14
+ "chocolate",
15
+ "pollen",
16
+ "cats"
17
+ ]
18
+
19
+
20
+ proc is_allergic_to*(allergies: Allergies, allergy: string): bool =
21
+ (allergies.score and 1 shl allergiesList.find(allergy)) != 0
22
+
23
+ proc lst*(allergies: Allergies): seq[string] =
24
+ allergiesList.filterIt(allergies.is_allergic_to(it))
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trackler
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.1.136
4
+ version: 2.2.1.137
5
5
  platform: ruby
6
6
  authors:
7
7
  - Katrina Owen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-04-21 00:00:00.000000000 Z
11
+ date: 2018-04-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyzip
@@ -3155,6 +3155,7 @@ files:
3155
3155
  - tracks/csharp/exercises/zipper/ZipperTest.cs
3156
3156
  - tracks/csharp/generators/.gitignore
3157
3157
  - tracks/csharp/generators/CustomExercise.cs
3158
+ - tracks/csharp/generators/DeprecatedExercise.cs
3158
3159
  - tracks/csharp/generators/Exercise.cs
3159
3160
  - tracks/csharp/generators/ExerciseCollection.cs
3160
3161
  - tracks/csharp/generators/Exercises/Acronym.cs
@@ -3205,6 +3206,7 @@ files:
3205
3206
  - tracks/csharp/generators/Exercises/PigLatin.cs
3206
3207
  - tracks/csharp/generators/Exercises/Poker.cs
3207
3208
  - tracks/csharp/generators/Exercises/PrimeFactors.cs
3209
+ - tracks/csharp/generators/Exercises/Proverb.cs
3208
3210
  - tracks/csharp/generators/Exercises/QueenAttack.cs
3209
3211
  - tracks/csharp/generators/Exercises/RailFenceCipher.cs
3210
3212
  - tracks/csharp/generators/Exercises/Raindrops.cs
@@ -9792,6 +9794,9 @@ files:
9792
9794
  - tracks/nim/docs/RESOURCES.md
9793
9795
  - tracks/nim/docs/SNIPPET.txt
9794
9796
  - tracks/nim/docs/TESTS.md
9797
+ - tracks/nim/exercises/allergies/README.md
9798
+ - tracks/nim/exercises/allergies/allergies_test.nim
9799
+ - tracks/nim/exercises/allergies/example.nim
9795
9800
  - tracks/nim/exercises/anagram/README.md
9796
9801
  - tracks/nim/exercises/anagram/anagram_test.nim
9797
9802
  - tracks/nim/exercises/anagram/example.nim