trackler 2.0.5.0 → 2.0.5.1
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 +4 -4
- data/lib/trackler/version.rb +1 -1
- data/tracks/crystal/exercises/largest-series-product/spec/largest_series_product_spec.cr +32 -16
- data/tracks/fsharp/exercises/grep/GrepTest.fs +2 -1
- data/tracks/fsharp/exercises/linked-list/Example.fs +24 -17
- data/tracks/fsharp/exercises/linked-list/HINTS.md +14 -0
- data/tracks/fsharp/exercises/linked-list/LinkedListTest.fs +73 -80
- data/tracks/lua/config.json +8 -0
- data/tracks/lua/exercises/meetup/example.lua +61 -0
- data/tracks/lua/exercises/meetup/meetup_spec.lua +858 -0
- data/tracks/purescript/.travis.yml +4 -0
- data/tracks/purescript/config.json +7 -0
- data/tracks/purescript/exercises/bob/bower.json +17 -0
- data/tracks/purescript/exercises/bob/examples/src/Bob.purs +49 -0
- data/tracks/purescript/exercises/bob/src/Bob.purs +3 -0
- data/tracks/purescript/exercises/bob/test/Main.purs +82 -0
- data/tracks/ruby/.gitignore +1 -0
- data/tracks/ruby/Gemfile +2 -0
- data/tracks/ruby/Rakefile +6 -0
- data/tracks/ruby/bin/executable-tests-check +1 -1
- data/tracks/ruby/config.json +2 -1
- data/tracks/ruby/lib/generator.rb +8 -3
- data/tracks/ruby/test/generator_test.rb +21 -0
- data/tracks/ruby/test/test_helper.rb +16 -0
- data/tracks/scala/config.json +17 -0
- data/tracks/scala/exercises/allergies/example.scala +1 -5
- data/tracks/scala/exercises/allergies/src/main/scala/Allergies.scala +11 -0
- data/tracks/scala/exercises/allergies/src/test/scala/AllergiesTest.scala +14 -14
- data/tracks/scala/exercises/atbash-cipher/example.scala +4 -4
- data/tracks/scala/exercises/atbash-cipher/src/main/scala/Atbash.scala +3 -0
- data/tracks/scala/exercises/atbash-cipher/src/test/scala/atbash_test.scala +9 -9
- data/tracks/scala/exercises/crypto-square/example.scala +1 -1
- data/tracks/scala/exercises/crypto-square/src/main/scala/CryptoSquare.scala +11 -0
- data/tracks/scala/exercises/crypto-square/src/test/scala/CryptoSquareTest.scala +17 -17
- data/tracks/scala/exercises/queen-attack/example.scala +2 -1
- data/tracks/scala/exercises/queen-attack/src/main/scala/Queens.scala +8 -0
- data/tracks/scala/exercises/queen-attack/src/test/scala/QueensTest.scala +9 -9
- data/tracks/scala/exercises/raindrops/example.scala +1 -5
- data/tracks/scala/exercises/raindrops/src/main/scala/Raindrops.scala +4 -0
- data/tracks/scala/exercises/raindrops/src/test/scala/RaindropsTest.scala +16 -16
- data/tracks/swift/README.md +16 -16
- metadata +16 -1
@@ -0,0 +1,17 @@
|
|
1
|
+
{
|
2
|
+
"name": "hello-world",
|
3
|
+
"ignore": [
|
4
|
+
"**/.*",
|
5
|
+
"node_modules",
|
6
|
+
"bower_components",
|
7
|
+
"output"
|
8
|
+
],
|
9
|
+
"dependencies": {
|
10
|
+
"purescript-prelude": "^2.1.0",
|
11
|
+
"purescript-console": "^2.0.0"
|
12
|
+
},
|
13
|
+
"devDependencies": {
|
14
|
+
"purescript-psci-support": "^2.0.0",
|
15
|
+
"purescript-test-unit": "^10.0.1"
|
16
|
+
}
|
17
|
+
}
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module Bob
|
2
|
+
( hey
|
3
|
+
) where
|
4
|
+
|
5
|
+
import Prelude
|
6
|
+
import Data.String as String
|
7
|
+
import Data.Either as Either
|
8
|
+
import Data.String.Regex as Regex
|
9
|
+
import Data.String.Regex.Flags (noFlags)
|
10
|
+
import Partial.Unsafe as Partial
|
11
|
+
|
12
|
+
hey :: String -> String
|
13
|
+
hey msg =
|
14
|
+
if hasLetters msg && allUppercase msg then
|
15
|
+
"Whoachill out!"
|
16
|
+
else if isQuestion msg then
|
17
|
+
"Sure."
|
18
|
+
else if isSilence msg then
|
19
|
+
"Fine. Be that way!"
|
20
|
+
else
|
21
|
+
"Whatever."
|
22
|
+
|
23
|
+
|
24
|
+
allUppercase :: String -> Boolean
|
25
|
+
allUppercase str =
|
26
|
+
String.toUpper str == str
|
27
|
+
|
28
|
+
|
29
|
+
isQuestion :: String -> Boolean
|
30
|
+
isQuestion =
|
31
|
+
testRegex "\\?$"
|
32
|
+
|
33
|
+
|
34
|
+
hasLetters :: String -> Boolean
|
35
|
+
hasLetters =
|
36
|
+
testRegex "[a-zA-Z]"
|
37
|
+
|
38
|
+
|
39
|
+
isSilence :: String -> Boolean
|
40
|
+
isSilence =
|
41
|
+
testRegex "^[\\s\\t\\n]*$"
|
42
|
+
|
43
|
+
|
44
|
+
testRegex :: String -> String -> Boolean
|
45
|
+
testRegex patternStr =
|
46
|
+
Regex.test
|
47
|
+
$ Partial.unsafePartial
|
48
|
+
$ Either.fromRight
|
49
|
+
$ Regex.regex patternStr noFlags
|
@@ -0,0 +1,82 @@
|
|
1
|
+
module Test.Main where
|
2
|
+
|
3
|
+
import Prelude
|
4
|
+
import Test.Unit (suite, test)
|
5
|
+
import Test.Unit.Main (runTest)
|
6
|
+
import Test.Unit.Assert as Assert
|
7
|
+
import Bob as Bob
|
8
|
+
|
9
|
+
|
10
|
+
main = runTest do
|
11
|
+
suite "Bob.hey" do
|
12
|
+
test "stating something" do
|
13
|
+
Assert.equal "Whatever." $
|
14
|
+
Bob.hey "Tom-ay-totom-aaaah-to."
|
15
|
+
|
16
|
+
test "shouting" do
|
17
|
+
Assert.equal "Whoachill out!" $
|
18
|
+
Bob.hey "WATCH OUT!"
|
19
|
+
|
20
|
+
test "asking a question" do
|
21
|
+
Assert.equal "Sure." $
|
22
|
+
Bob.hey "Does this cryogenic chamber make me look fat?"
|
23
|
+
|
24
|
+
test "asking a numeric question" do
|
25
|
+
Assert.equal "Sure." $
|
26
|
+
Bob.hey "You arewhat, like 15?"
|
27
|
+
|
28
|
+
test "talking forcefully" do
|
29
|
+
Assert.equal "Whatever." $
|
30
|
+
Bob.hey "Let's go make out behind the gym!"
|
31
|
+
|
32
|
+
test "using acronyms in regular speech" do
|
33
|
+
Assert.equal "Whatever." $
|
34
|
+
Bob.hey "It's OK if you don't want to go to the DMV."
|
35
|
+
|
36
|
+
test "forceful questions" do
|
37
|
+
Assert.equal "Whoachill out!" $
|
38
|
+
Bob.hey "WHAT THE HELL WERE YOU THINKING?"
|
39
|
+
|
40
|
+
test "shouting numbers" do
|
41
|
+
Assert.equal "Whoachill out!" $
|
42
|
+
Bob.hey "12, 3 GO!"
|
43
|
+
|
44
|
+
test "only numbers" do
|
45
|
+
Assert.equal "Whatever." $
|
46
|
+
Bob.hey "12, 3"
|
47
|
+
|
48
|
+
test "question with only numbers" do
|
49
|
+
Assert.equal "Sure." $
|
50
|
+
Bob.hey "4?"
|
51
|
+
|
52
|
+
test "shouting with special characters" do
|
53
|
+
Assert.equal "Whoachill out!" $
|
54
|
+
Bob.hey "ZOMG THE %^*@#$(*^ ZOMBIES ARE COMING!!11!!1!"
|
55
|
+
|
56
|
+
test "shouting with no exclamation mark" do
|
57
|
+
Assert.equal "Whoachill out!" $
|
58
|
+
Bob.hey "I HATE YOU"
|
59
|
+
|
60
|
+
test "statement containing a question mark" do
|
61
|
+
Assert.equal "Whatever." $
|
62
|
+
Bob.hey "Ending with ? means a question."
|
63
|
+
|
64
|
+
test "prattling on" do
|
65
|
+
Assert.equal "Sure." $
|
66
|
+
Bob.hey "Wait! Hang on. Are you going to be OK?"
|
67
|
+
|
68
|
+
test "silence" do
|
69
|
+
Assert.equal "Fine. Be that way!" $
|
70
|
+
Bob.hey ""
|
71
|
+
|
72
|
+
test "prolonged silence" do
|
73
|
+
Assert.equal "Fine. Be that way!" $
|
74
|
+
Bob.hey " "
|
75
|
+
|
76
|
+
test "alternate silences" do
|
77
|
+
Assert.equal "Fine. Be that way!" $
|
78
|
+
Bob.hey "\t \n \t "
|
79
|
+
|
80
|
+
test "on multiple line questions" do
|
81
|
+
Assert.equal "Whatever." $
|
82
|
+
Bob.hey "\nDoes this cryogenic chamber make me look fat?\nno"
|
data/tracks/ruby/.gitignore
CHANGED
data/tracks/ruby/Gemfile
CHANGED
@@ -3,7 +3,7 @@ require 'minitest/autorun'
|
|
3
3
|
|
4
4
|
# Assume that this file lives in #{base}/bin
|
5
5
|
base = File.join(__dir__,'..')
|
6
|
-
files = Dir.glob("#{base}/**/*test.rb") + Dir.glob("#{base}/bin/*")
|
6
|
+
files = Dir.glob("#{base}/exercises/**/*test.rb") + Dir.glob("#{base}/bin/*")
|
7
7
|
|
8
8
|
files.each do |file|
|
9
9
|
describe file do
|
data/tracks/ruby/config.json
CHANGED
@@ -8,17 +8,22 @@ class Generator
|
|
8
8
|
METADATA_REPOSITORY = 'x-common'.freeze
|
9
9
|
|
10
10
|
attr_reader :name, :cases
|
11
|
-
def initialize(name, cases)
|
11
|
+
def initialize(name, cases, metadata_repository_path=nil)
|
12
12
|
@name = name
|
13
13
|
@cases = cases
|
14
|
+
@metadata_repository_path = metadata_repository_path || default_metadata_path
|
15
|
+
end
|
16
|
+
|
17
|
+
def default_metadata_path
|
18
|
+
File.join( '..', METADATA_REPOSITORY)
|
14
19
|
end
|
15
20
|
|
16
21
|
def metadata_dir
|
17
|
-
File.
|
22
|
+
File.join(@metadata_repository_path, 'exercises', name)
|
18
23
|
end
|
19
24
|
|
20
25
|
def exercise_dir
|
21
|
-
File.
|
26
|
+
File.join('exercises', name)
|
22
27
|
end
|
23
28
|
|
24
29
|
def exercise_meta_dir
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require_relative 'test_helper'
|
2
|
+
|
3
|
+
class GeneratorTest < Minitest::Test
|
4
|
+
def test_default_metadata_path
|
5
|
+
subject = Generator.new('aname', nil)
|
6
|
+
# This is relative to the xruby root
|
7
|
+
assert_equal '../x-common/exercises/aname', subject.metadata_dir
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_initalize_with_fixture_path
|
11
|
+
fixture_path = 'xruby/test/fixtures'
|
12
|
+
subject = Generator.new('aname', nil, fixture_path)
|
13
|
+
assert_equal 'xruby/test/fixtures/exercises/aname', subject.metadata_dir
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_exercise_dir
|
17
|
+
subject = Generator.new('aname', nil)
|
18
|
+
# This is relative to the xruby root
|
19
|
+
assert_equal 'exercises/aname', subject.exercise_dir
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
$LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
|
2
|
+
|
3
|
+
require 'simplecov'
|
4
|
+
require 'minitest/autorun'
|
5
|
+
require 'minitest/pride'
|
6
|
+
|
7
|
+
SimpleCov.start do
|
8
|
+
add_filter '/tests/'
|
9
|
+
add_group 'Utilities' do |file|
|
10
|
+
!(file.filename =~ /_cases\.rb$/)
|
11
|
+
end
|
12
|
+
add_group 'Cases', '_cases.rb'
|
13
|
+
end
|
14
|
+
|
15
|
+
# So we can be sure we have coverage on the whole lib directory:
|
16
|
+
Dir.glob('lib/*.rb').each { |file| require file.gsub(%r{(^lib\/|\.rb$)}, '') }
|
data/tracks/scala/config.json
CHANGED
@@ -167,18 +167,27 @@
|
|
167
167
|
"slug": "raindrops",
|
168
168
|
"difficulty": 1,
|
169
169
|
"topics": [
|
170
|
+
"Strings",
|
171
|
+
"Logic",
|
172
|
+
"Transforming"
|
170
173
|
]
|
171
174
|
},
|
172
175
|
{
|
173
176
|
"slug": "allergies",
|
174
177
|
"difficulty": 1,
|
175
178
|
"topics": [
|
179
|
+
"Lists",
|
180
|
+
"Enumerations",
|
181
|
+
"Filtering"
|
176
182
|
]
|
177
183
|
},
|
178
184
|
{
|
179
185
|
"slug": "atbash-cipher",
|
180
186
|
"difficulty": 1,
|
181
187
|
"topics": [
|
188
|
+
"Strings",
|
189
|
+
"Transforming",
|
190
|
+
"Security"
|
182
191
|
]
|
183
192
|
},
|
184
193
|
{
|
@@ -197,6 +206,10 @@
|
|
197
206
|
"slug": "crypto-square",
|
198
207
|
"difficulty": 1,
|
199
208
|
"topics": [
|
209
|
+
"Strings",
|
210
|
+
"Lists",
|
211
|
+
"Security",
|
212
|
+
"Transforming"
|
200
213
|
]
|
201
214
|
},
|
202
215
|
{
|
@@ -221,6 +234,10 @@
|
|
221
234
|
"slug": "queen-attack",
|
222
235
|
"difficulty": 1,
|
223
236
|
"topics": [
|
237
|
+
"Strings",
|
238
|
+
"Optional values",
|
239
|
+
"Logic",
|
240
|
+
"Games"
|
224
241
|
]
|
225
242
|
},
|
226
243
|
{
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import Allergen.Allergen
|
2
2
|
|
3
|
-
|
3
|
+
object Allergies {
|
4
4
|
private lazy val allergenList = Allergen.values
|
5
5
|
|
6
6
|
def isAllergicTo(allergen: Allergen, score: Int): Boolean =
|
@@ -10,10 +10,6 @@ class Allergies {
|
|
10
10
|
allergenList.filter(a => isAllergicTo(a, score)).toList
|
11
11
|
}
|
12
12
|
|
13
|
-
object Allergies {
|
14
|
-
def apply() = new Allergies
|
15
|
-
}
|
16
|
-
|
17
13
|
object Allergen extends Enumeration {
|
18
14
|
type Allergen = Value
|
19
15
|
|
@@ -2,67 +2,67 @@ import org.scalatest.{Matchers, FlatSpec}
|
|
2
2
|
|
3
3
|
class AllergiesTest extends FlatSpec with Matchers {
|
4
4
|
it should "handle no allergies means not allergic" in {
|
5
|
-
Allergies
|
6
|
-
Allergies
|
7
|
-
Allergies
|
5
|
+
Allergies.isAllergicTo(Allergen.Peanuts, 0) should equal (false)
|
6
|
+
Allergies.isAllergicTo(Allergen.Cats, 0) should equal (false)
|
7
|
+
Allergies.isAllergicTo(Allergen.Strawberries, 0) should equal (false)
|
8
8
|
}
|
9
9
|
|
10
10
|
it should "handle is allergic to eggs" in {
|
11
11
|
pending
|
12
|
-
Allergies
|
12
|
+
Allergies.isAllergicTo(Allergen.Eggs, 1) should equal (true)
|
13
13
|
}
|
14
14
|
|
15
15
|
it should "handle is allergic to eggs in addition to other stuff" in {
|
16
16
|
pending
|
17
|
-
Allergies
|
17
|
+
Allergies.isAllergicTo(Allergen.Eggs, 5) should equal (true)
|
18
18
|
}
|
19
19
|
|
20
20
|
it should "handle no allergies" in {
|
21
21
|
pending
|
22
|
-
Allergies
|
22
|
+
Allergies.allergies(0) should equal (List())
|
23
23
|
}
|
24
24
|
|
25
25
|
it should "handle allergic to just eggs" in {
|
26
26
|
pending
|
27
|
-
Allergies
|
27
|
+
Allergies.allergies(1) should equal (List(Allergen.Eggs))
|
28
28
|
}
|
29
29
|
|
30
30
|
it should "handle allergic to just peanuts" in {
|
31
31
|
pending
|
32
|
-
Allergies
|
32
|
+
Allergies.allergies(2) should equal (List(Allergen.Peanuts))
|
33
33
|
}
|
34
34
|
|
35
35
|
it should "handle allergic to just strawberries" in {
|
36
36
|
pending
|
37
|
-
Allergies
|
37
|
+
Allergies.allergies(8) should equal (List(Allergen.Strawberries))
|
38
38
|
}
|
39
39
|
|
40
40
|
it should "handle allergic to eggs and peanuts" in {
|
41
41
|
pending
|
42
|
-
Allergies
|
42
|
+
Allergies.allergies(3) should equal (List(Allergen.Eggs, Allergen.Peanuts))
|
43
43
|
}
|
44
44
|
|
45
45
|
it should "handle allergic to more than eggs but not peanuts" in {
|
46
46
|
pending
|
47
|
-
Allergies
|
47
|
+
Allergies.allergies(5) should equal (List(Allergen.Eggs, Allergen.Shellfish))
|
48
48
|
}
|
49
49
|
|
50
50
|
it should "handle allergic to lots of stuff" in {
|
51
51
|
pending
|
52
|
-
Allergies
|
52
|
+
Allergies.allergies(248) should equal (List(Allergen.Strawberries, Allergen.Tomatoes,
|
53
53
|
Allergen.Chocolate, Allergen.Pollen, Allergen.Cats))
|
54
54
|
}
|
55
55
|
|
56
56
|
it should "handle allergic to everything" in {
|
57
57
|
pending
|
58
|
-
Allergies
|
58
|
+
Allergies.allergies(255) should equal (List(Allergen.Eggs, Allergen.Peanuts,
|
59
59
|
Allergen.Shellfish, Allergen.Strawberries, Allergen.Tomatoes,
|
60
60
|
Allergen.Chocolate, Allergen.Pollen, Allergen.Cats))
|
61
61
|
}
|
62
62
|
|
63
63
|
it should "ignore non allergen score parts" in {
|
64
64
|
pending
|
65
|
-
Allergies
|
65
|
+
Allergies.allergies(509) should equal (List(Allergen.Eggs,
|
66
66
|
Allergen.Shellfish, Allergen.Strawberries, Allergen.Tomatoes,
|
67
67
|
Allergen.Chocolate, Allergen.Pollen, Allergen.Cats))
|
68
68
|
}
|