trackler 2.0.8.40 → 2.0.8.41

Sign up to get free protection for your applications and to get access to all the features.
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