trackler 2.0.8.40 → 2.0.8.41

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: 9d30d6eef2ec6bb48c145139282b4dfd7ae00001
4
- data.tar.gz: 9f8b29d64bf05c03625ee0f2dfc057c6fde1ea04
3
+ metadata.gz: 5d69353254fc4ffd4ba4aa0def00d3d50072abe6
4
+ data.tar.gz: b39816fc7ab3bc4e0dc967d164153ebc7ca966ad
5
5
  SHA512:
6
- metadata.gz: c2f55c537bf59e203edc2d98bfe922b699643a0f5838fd52d216f0a194a82bd665f3ed687e8c53220c7994beaaef35daca336aab2ac48fe19d192a1b93d139c4
7
- data.tar.gz: 2f6b57f6ed237a96d07a34c73f4d436968c7b69191c961d9fc1e50b14147af4e4ec3d8a58d215dfae735854aec1cd51f9acb3190f0e5569eecf357b39885ecd2
6
+ metadata.gz: 9847a2b2d9141ec9ec8ffbec5f31962cd80c787575f9ce16efef0c9ee50ed71b1d1c3adb019a3adfdad2fa6711a5ce349a5a7a535d1001194352f1484aac937a
7
+ data.tar.gz: dc710738809d474bac826e1b4fa261521da31dcb41fba063718a4bb4d8825569bead88b971bcc731a8e3f538a0963ba0eca33ccfdc77846452b98d623dfd691a
@@ -1,7 +1,13 @@
1
1
  {
2
2
  "exercise": "flatten-array",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "cases": [
5
+ {
6
+ "description": "no nesting",
7
+ "property": "flatten",
8
+ "input": [0, 1, 2],
9
+ "expected": [0, 1, 2]
10
+ },
5
11
  {
6
12
  "description": "flattens array with just integers present",
7
13
  "property": "flatten",
@@ -1,3 +1,3 @@
1
1
  module Trackler
2
- VERSION = "2.0.8.40"
2
+ VERSION = "2.0.8.41"
3
3
  end
@@ -1,3 +1,2 @@
1
1
  ## Hints
2
- This exercise requires you to use bitwise operations. For more information, see [this page]
3
- (https://msdn.microsoft.com/en-us/library/6a71f45d.aspx).
2
+ This exercise requires you to use bitwise operations. For more information, see [this page](https://msdn.microsoft.com/en-us/library/6a71f45d.aspx).
@@ -0,0 +1,4 @@
1
+ ## Hints
2
+
3
+ For this exercise, you will need to create a set of factors using tuples.
4
+ For more information on tuples, see [this link](https://msdn.microsoft.com/en-us/library/system.tuple(v=vs.110).aspx).
@@ -100,6 +100,14 @@
100
100
  "topics": [
101
101
  "dates"
102
102
  ]
103
+ },
104
+ {
105
+ "slug": "allergies",
106
+ "difficulty": 1,
107
+ "topics": [
108
+ "maps",
109
+ "bitwise operations"
110
+ ]
103
111
  }
104
112
  ],
105
113
  "deprecated": [
@@ -0,0 +1,18 @@
1
+ {
2
+ "name": "allergies",
3
+ "ignore": [
4
+ "**/.*",
5
+ "node_modules",
6
+ "bower_components",
7
+ "output"
8
+ ],
9
+ "dependencies": {
10
+ "purescript-prelude": "^2.5.0",
11
+ "purescript-maps": "^2.1.2",
12
+ "purescript-integers": "^2.1.1"
13
+ },
14
+ "devDependencies": {
15
+ "purescript-psci-support": "^2.0.0",
16
+ "purescript-test-unit": "^10.1.0"
17
+ }
18
+ }
@@ -0,0 +1,31 @@
1
+ module Allergies
2
+ ( allergicTo
3
+ , list
4
+ ) where
5
+
6
+ import Prelude
7
+ import Data.Array (filter)
8
+ import Data.Int.Bits ((.&.))
9
+ import Data.Map (fromFoldable, lookup)
10
+ import Data.Maybe (fromMaybe)
11
+ import Data.Tuple (Tuple(Tuple), fst)
12
+
13
+ weights :: Array (Tuple String Int)
14
+ weights =
15
+ [ Tuple "eggs" 1
16
+ , Tuple "peanuts" 2
17
+ , Tuple "shellfish" 4
18
+ , Tuple "strawberries" 8
19
+ , Tuple "tomatoes" 16
20
+ , Tuple "chocolate" 32
21
+ , Tuple "pollen" 64
22
+ , Tuple "cats" 128
23
+ ]
24
+
25
+ allergicTo :: Int -> String -> Boolean
26
+ allergicTo score substance = fromMaybe false $ do
27
+ weight <- lookup substance (fromFoldable weights)
28
+ pure $ score .&. weight == weight
29
+
30
+ list :: Int -> Array String
31
+ list score = filter (allergicTo score) (map fst weights)
@@ -0,0 +1,4 @@
1
+ module Allergies
2
+ ( allergicTo
3
+ , list
4
+ ) where
@@ -0,0 +1,108 @@
1
+ module Test.Main where
2
+
3
+ import Prelude
4
+ import Control.Monad.Eff (Eff)
5
+ import Data.Maybe (Maybe(..))
6
+ import Test.Unit.Assert as Assert
7
+ import Test.Unit (suite, test)
8
+ import Test.Unit.Main (runTest)
9
+ import Allergies (allergicTo, list)
10
+
11
+ main :: Eff _ Unit
12
+ main = runTest do
13
+
14
+ suite "Allergies.allergicTo" do
15
+
16
+ test "no allergies means not allergic" $
17
+ Assert.equal false
18
+ (allergicTo 0 "peanuts")
19
+
20
+ test "no allergies means not allergic" $
21
+ Assert.equal false
22
+ (allergicTo 0 "cats")
23
+
24
+ test "no allergies means not allergic" $
25
+ Assert.equal false
26
+ (allergicTo 0 "strawberries")
27
+
28
+ test "is allergic to eggs" $
29
+ Assert.equal true
30
+ (allergicTo 1 "eggs")
31
+
32
+ test "allergic to eggs in addition to other stuff" $
33
+ Assert.equal true
34
+ (allergicTo 5 "eggs")
35
+
36
+ test "allergic to eggs in addition to other stuff" $
37
+ Assert.equal true
38
+ (allergicTo 5 "shellfish")
39
+
40
+ test "allergic to eggs in addition to other stuff" $
41
+ Assert.equal false
42
+ (allergicTo 5 "strawberries")
43
+
44
+ suite "Allergies.list" do
45
+
46
+ test "no allergies at all" $
47
+ Assert.equal [
48
+ ]
49
+ (list 0)
50
+
51
+ test "allergic to just eggs" $
52
+ Assert.equal [ "eggs"
53
+ ]
54
+ (list 1)
55
+
56
+ test "allergic to just peanuts" $
57
+ Assert.equal [ "peanuts"
58
+ ]
59
+ (list 2)
60
+
61
+ test "allergic to just strawberries" $
62
+ Assert.equal [ "strawberries"
63
+ ]
64
+ (list 8)
65
+
66
+ test "allergic to eggs and peanuts" $
67
+ Assert.equal [ "eggs"
68
+ , "peanuts"
69
+ ]
70
+ (list 3)
71
+
72
+ test "allergic to more than eggs but not peanuts" $
73
+ Assert.equal [ "eggs"
74
+ , "shellfish"
75
+ ]
76
+ (list 5)
77
+
78
+ test "allergic to lots of stuff" $
79
+ Assert.equal [ "strawberries"
80
+ , "tomatoes"
81
+ , "chocolate"
82
+ , "pollen"
83
+ , "cats"
84
+ ]
85
+ (list 248)
86
+
87
+ test "allergic to everything" $
88
+ Assert.equal [ "eggs"
89
+ , "peanuts"
90
+ , "shellfish"
91
+ , "strawberries"
92
+ , "tomatoes"
93
+ , "chocolate"
94
+ , "pollen"
95
+ , "cats"
96
+ ]
97
+ (list 255)
98
+
99
+ test "ignore non allergen score parts" $
100
+ Assert.equal [ "eggs"
101
+ , "shellfish"
102
+ , "strawberries"
103
+ , "tomatoes"
104
+ , "chocolate"
105
+ , "pollen"
106
+ , "cats"
107
+ ]
108
+ (list 509)
@@ -1,53 +1,42 @@
1
1
  import unittest
2
2
 
3
- import etl
3
+ from etl import transform
4
4
 
5
5
 
6
- class TransformTest(unittest.TestCase):
7
- def test_transform_one_value(self):
8
- old = {1: ['WORLD']}
9
- expected = {'world': 1}
10
-
11
- self.assertEqual(etl.transform(old), expected)
12
-
13
- def test_transform_more_values(self):
14
- old = {1: ['WORLD', 'GSCHOOLERS']}
15
- expected = {'world': 1, 'gschoolers': 1}
6
+ # test cases adapted from `x-common//canonical-data.json` @ version: 1.0.0
16
7
 
17
- self.assertEqual(etl.transform(old), expected)
18
-
19
- def test_more_keys(self):
20
- old = {1: ['APPLE', 'ARTICHOKE'], 2: ['BOAT', 'BALLERINA']}
21
- expected = {
22
- 'apple': 1,
23
- 'artichoke': 1,
24
- 'boat': 2,
25
- 'ballerina': 2
26
- }
27
-
28
- self.assertEqual(etl.transform(old), expected)
29
-
30
- def test_full_dataset(self):
31
- old = {
32
- 1: "AEIOULNRST",
33
- 2: "DG",
34
- 3: "BCMP",
35
- 4: "FHVWY",
36
- 5: "K",
37
- 8: "JX",
38
- 10: "QZ",
8
+ class TransformTest(unittest.TestCase):
9
+ def test_a_single_letter(self):
10
+ self.assertEqual(transform({1: ['A']}), {'a': 1})
11
+
12
+ def test_single_score_with_multiple_letters(self):
13
+ legacy_data = {1: ["A", "E", "I", "O", "U"]}
14
+ data = {"a": 1, "e": 1, "i": 1, "o": 1, "u": 1}
15
+ self.assertEqual(transform(legacy_data), data)
16
+
17
+ def test_multiple_scores_with_multiple_letters(self):
18
+ legacy_data = {1: ["A", "E"], 2: ["D", "G"]}
19
+ data = {"a": 1, "d": 2, "e": 1, "g": 2}
20
+ self.assertEqual(transform(legacy_data), data)
21
+
22
+ def test_multiple_scores_with_differing_numbers_of_letters(self):
23
+ legacy_data = {
24
+ 1: ["A", "E", "I", "O", "U", "L", "N", "R", "S", "T"],
25
+ 2: ["D", "G"],
26
+ 3: ["B", "C", "M", "P"],
27
+ 4: ["F", "H", "V", "W", "Y"],
28
+ 5: ["K"],
29
+ 8: ["J", "X"],
30
+ 10: ["Q", "Z"]
39
31
  }
40
-
41
- expected = {
42
- "a": 1, "b": 3, "c": 3, "d": 2, "e": 1,
43
- "f": 4, "g": 2, "h": 4, "i": 1, "j": 8,
44
- "k": 5, "l": 1, "m": 3, "n": 1, "o": 1,
45
- "p": 3, "q": 10, "r": 1, "s": 1, "t": 1,
46
- "u": 1, "v": 4, "w": 4, "x": 8, "y": 4,
47
- "z": 10
32
+ data = {
33
+ "a": 1, "b": 3, "c": 3, "d": 2, "e": 1, "f": 4,
34
+ "g": 2, "h": 4, "i": 1, "j": 8, "k": 5, "l": 1,
35
+ "m": 3, "n": 1, "o": 1, "p": 3, "q": 10, "r": 1,
36
+ "s": 1, "t": 1, "u": 1, "v": 4, "w": 4, "x": 8,
37
+ "y": 4, "z": 10
48
38
  }
49
-
50
- self.assertEqual(etl.transform(old), expected)
39
+ self.assertEqual(transform(legacy_data), data)
51
40
 
52
41
 
53
42
  if __name__ == '__main__':
@@ -3,28 +3,30 @@ import unittest
3
3
  from rail_fence_cipher import encode, decode
4
4
 
5
5
 
6
+ # test cases adapted from `x-common//canonical-data.json` @ version: 1.0.0
7
+
6
8
  class RailFenceTests(unittest.TestCase):
7
- def test_encode_with_two_rails(self):
9
+ def test_to_encode_with_two_rails(self):
8
10
  self.assertMultiLineEqual(
9
11
  encode('XOXOXOXOXOXOXOXOXO', 2), 'XXXXXXXXXOOOOOOOOO')
10
12
 
11
- def test_encode_with_three_rails(self):
13
+ def test_to_encode_with_three_rails(self):
12
14
  self.assertMultiLineEqual(
13
15
  encode('WEAREDISCOVEREDFLEEATONCE', 3),
14
16
  'WECRLTEERDSOEEFEAOCAIVDEN')
15
17
 
16
- def test_encode_with_middle_stop(self):
18
+ def test_to_encode_with_ending_in_the_middle(self):
17
19
  self.assertMultiLineEqual(encode('EXERCISES', 4), 'ESXIEECSR')
18
20
 
19
- def test_decode_with_three_rails(self):
21
+ def test_to_decode_with_three_rails(self):
20
22
  self.assertMultiLineEqual(
21
23
  decode('TEITELHDVLSNHDTISEIIEA', 3), 'THEDEVILISINTHEDETAILS')
22
24
 
23
- def test_decode_with_five_rails(self):
25
+ def test_to_decode_with_five_rails(self):
24
26
  self.assertMultiLineEqual(
25
27
  decode('EIEXMSMESAORIWSCE', 5), 'EXERCISMISAWESOME')
26
28
 
27
- def test_decode_with_six_rails(self):
29
+ def test_to_decode_with_six_rails(self):
28
30
  self.assertMultiLineEqual(
29
31
  decode(
30
32
  '133714114238148966225439541018335470986172518171757571896261',
@@ -3,6 +3,8 @@ import unittest
3
3
  import roman_numerals
4
4
 
5
5
 
6
+ # test cases adapted from `x-common//canonical-data.json` @ version: 1.0.0
7
+
6
8
  class RomanTest(unittest.TestCase):
7
9
  numerals = {
8
10
  1: 'I',
@@ -3,6 +3,8 @@ import unittest
3
3
  import rotational_cipher
4
4
 
5
5
 
6
+ # test cases adapted from `x-common//canonical-data.json` @ version: 1.0.0
7
+
6
8
  class RotationalCipher(unittest.TestCase):
7
9
  def test_rotate_a_by_1(self):
8
10
  self.assertEqual(rotational_cipher.rotate('a', 1), 'b')
@@ -23,29 +25,22 @@ class RotationalCipher(unittest.TestCase):
23
25
  self.assertEqual(rotational_cipher.rotate('OMG', 5), 'TRL')
24
26
 
25
27
  def test_rotate_spaces(self):
26
- self.assertEqual(rotational_cipher.rotate('O M G', 5),
27
- 'T R L')
28
+ self.assertEqual(rotational_cipher.rotate('O M G', 5), 'T R L')
28
29
 
29
30
  def test_rotate_numbers(self):
30
31
  self.assertEqual(
31
- rotational_cipher.rotate(
32
- 'Testing 1 2 3 testing',
33
- 4),
32
+ rotational_cipher.rotate('Testing 1 2 3 testing', 4),
34
33
  'Xiwxmrk 1 2 3 xiwxmrk')
35
34
 
36
35
  def test_rotate_punctuation(self):
37
36
  self.assertEqual(
38
- rotational_cipher.rotate(
39
- "Let's eat, Grandma!",
40
- 21),
37
+ rotational_cipher.rotate("Let's eat, Grandma!", 21),
41
38
  "Gzo'n zvo, Bmviyhv!")
42
39
 
43
40
  def test_rotate_all_letters(self):
44
41
  self.assertEqual(
45
- rotational_cipher.rotate(
46
- "The quick brown fox jumps"
47
- " over the lazy dog.",
48
- 13),
42
+ rotational_cipher.rotate("The quick brown fox jumps"
43
+ " over the lazy dog.", 13),
49
44
  "Gur dhvpx oebja sbk whzcf bire gur ynml qbt.")
50
45
 
51
46
 
@@ -3,28 +3,42 @@ import unittest
3
3
  from scrabble_score import score
4
4
 
5
5
 
6
+ # test cases adapted from `x-common//canonical-data.json` @ version: 1.0.0
7
+
6
8
  class WordTest(unittest.TestCase):
7
- def test_invalid_word_scores_zero(self):
8
- self.assertEqual(score(''), 0)
9
- self.assertEqual(score(' \t\n'), 0)
10
- self.assertEqual(score('hous3'), 0)
11
- self.assertEqual(score('wo rd'), 0)
9
+ def test_lowercase_letter(self):
10
+ self.assertEqual(score("a"), 1)
11
+
12
+ def test_uppercase_letter(self):
13
+ self.assertEqual(score("A"), 1)
14
+
15
+ def test_valuable_letter(self):
16
+ self.assertEqual(score("f"), 4)
12
17
 
13
- def test_scores_very_short_word(self):
14
- self.assertEqual(score('a'), 1)
18
+ def test_short_word(self):
19
+ self.assertEqual(score("at"), 2)
15
20
 
16
- def test_scores_other_very_short_word(self):
17
- self.assertEqual(score('f'), 4)
21
+ def test_short_valuable_word(self):
22
+ self.assertEqual(score("zoo"), 12)
18
23
 
19
- def test_simple_word_scores_the_number_of_letters(self):
24
+ def test_medium_word(self):
20
25
  self.assertEqual(score("street"), 6)
21
26
 
22
- def test_complicated_word_scores_more(self):
27
+ def test_medium_valuable_word(self):
23
28
  self.assertEqual(score("quirky"), 22)
24
29
 
25
- def test_scores_are_case_insensitive(self):
30
+ def test_long_mixed_case_word(self):
26
31
  self.assertEqual(score("OxyphenButazone"), 41)
27
32
 
33
+ def test_english_like_word(self):
34
+ self.assertEqual(score("pinata"), 8)
35
+
36
+ def test_empty_input(self):
37
+ self.assertEqual(score(""), 0)
38
+
39
+ def test_entire_alphabet_available(self):
40
+ self.assertEqual(score("abcdefghijklmnopqrstuvwxyz"), 87)
41
+
28
42
 
29
43
  if __name__ == '__main__':
30
44
  unittest.main()
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.0.8.40
4
+ version: 2.0.8.41
5
5
  platform: ruby
6
6
  authors:
7
7
  - Katrina Owen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-04-04 00:00:00.000000000 Z
11
+ date: 2017-04-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyzip
@@ -1654,6 +1654,7 @@ files:
1654
1654
  - tracks/csharp/exercises/ocr-numbers/OcrNumbers.csproj
1655
1655
  - tracks/csharp/exercises/ocr-numbers/OcrNumbersTest.cs
1656
1656
  - tracks/csharp/exercises/palindrome-products/Example.cs
1657
+ - tracks/csharp/exercises/palindrome-products/HINTS.md
1657
1658
  - tracks/csharp/exercises/palindrome-products/PalindromeProducts.cs
1658
1659
  - tracks/csharp/exercises/palindrome-products/PalindromeProducts.csproj
1659
1660
  - tracks/csharp/exercises/palindrome-products/PalindromeTest.cs
@@ -6548,6 +6549,10 @@ files:
6548
6549
  - tracks/purescript/exercises/acronym/examples/src/Acronym.purs
6549
6550
  - tracks/purescript/exercises/acronym/src/Acronym.purs
6550
6551
  - tracks/purescript/exercises/acronym/test/Main.purs
6552
+ - tracks/purescript/exercises/allergies/bower.json
6553
+ - tracks/purescript/exercises/allergies/examples/src/Allergies.purs
6554
+ - tracks/purescript/exercises/allergies/src/Allergies.purs
6555
+ - tracks/purescript/exercises/allergies/test/Main.purs
6551
6556
  - tracks/purescript/exercises/atbash-cipher/bower.json
6552
6557
  - tracks/purescript/exercises/atbash-cipher/examples/src/AtbashCipher.purs
6553
6558
  - tracks/purescript/exercises/atbash-cipher/src/AtbashCipher.purs