trackler 2.0.8.18 → 2.0.8.19

Sign up to get free protection for your applications and to get access to all the features.
Files changed (165) hide show
  1. checksums.yaml +4 -4
  2. data/common/.gitignore +1 -0
  3. data/common/.travis.yml +5 -8
  4. data/common/README.md +18 -5
  5. data/common/exercises/grep/canonical-data.json +290 -269
  6. data/common/exercises/phone-number/canonical-data.json +2 -2
  7. data/common/exercises/pov/canonical-data.json +2 -5
  8. data/common/exercises/roman-numerals/canonical-data.json +112 -74
  9. data/common/exercises/tournament/canonical-data.json +86 -85
  10. data/common/exercises/two-bucket/canonical-data.json +55 -47
  11. data/common/package.json +16 -0
  12. data/common/yarn.lock +195 -0
  13. data/lib/trackler/version.rb +1 -1
  14. data/tracks/c/docs/LEARNING.md +1 -1
  15. data/tracks/c/exercises/space-age/src/example.c +15 -47
  16. data/tracks/c/exercises/space-age/src/example.h +12 -8
  17. data/tracks/c/exercises/space-age/test/test_space_age.c +8 -8
  18. data/tracks/ceylon/docs/TESTS.md +5 -2
  19. data/tracks/ceylon/exercises/TRACK_HINTS.md +5 -2
  20. data/tracks/csharp/.gitignore +0 -4
  21. data/tracks/csharp/.travis.yml +9 -20
  22. data/tracks/csharp/appveyor.yml +2 -4
  23. data/tracks/csharp/build.cake +95 -0
  24. data/tracks/csharp/build.ps1 +189 -0
  25. data/tracks/csharp/build.sh +99 -31
  26. data/tracks/csharp/circle.yml +3 -12
  27. data/tracks/delphi/config.json +8 -0
  28. data/tracks/delphi/exercises/minesweeper/MineSweeper.dpr +60 -0
  29. data/tracks/delphi/exercises/minesweeper/uMineSweeperExample.pas +70 -0
  30. data/tracks/delphi/exercises/minesweeper/uMineSweeperTest.pas +270 -0
  31. data/tracks/dlang/config.json +86 -31
  32. data/tracks/elixir/config.json +7 -0
  33. data/tracks/elixir/exercises/rotational-cipher/example.exs +35 -0
  34. data/tracks/elixir/exercises/rotational-cipher/rotational_cipher.exs +13 -0
  35. data/tracks/elixir/exercises/rotational-cipher/rotational_cipher_test.exs +80 -0
  36. data/tracks/go/exercises/raindrops/raindrops_test.go +4 -1
  37. data/tracks/go/exercises/react/react_test.go +6 -8
  38. data/tracks/go/exercises/rna-transcription/rna_transcription_test.go +4 -1
  39. data/tracks/go/exercises/robot-simulator/robot_simulator_test.go +5 -2
  40. data/tracks/haskell/exercises/allergies/src/Allergies.hs +2 -2
  41. data/tracks/haskell/exercises/atbash-cipher/src/Atbash.hs +2 -2
  42. data/tracks/haskell/exercises/bank-account/src/BankAccount.hs +3 -3
  43. data/tracks/haskell/exercises/binary-search-tree/src/BST.hs +7 -7
  44. data/tracks/haskell/exercises/bowling/src/Bowling.hs +1 -1
  45. data/tracks/haskell/exercises/clock/src/Clock.hs +4 -4
  46. data/tracks/haskell/exercises/connect/src/Connect.hs +1 -1
  47. data/tracks/haskell/exercises/crypto-square/src/CryptoSquare.hs +1 -1
  48. data/tracks/haskell/exercises/custom-set/src/CustomSet.hs +12 -12
  49. data/tracks/haskell/exercises/difference-of-squares/src/Squares.hs +3 -3
  50. data/tracks/haskell/exercises/etl/src/ETL.hs +1 -1
  51. data/tracks/haskell/exercises/forth/src/Forth.hs +2 -2
  52. data/tracks/haskell/exercises/go-counting/src/Counting.hs +2 -2
  53. data/tracks/haskell/exercises/kindergarten-garden/src/Garden.hs +3 -3
  54. data/tracks/haskell/exercises/largest-series-product/src/Series.hs +1 -1
  55. data/tracks/haskell/exercises/lens-person/src/Person.hs +4 -4
  56. data/tracks/julia/.travis.yml +3 -2
  57. data/tracks/ocaml/exercises/all-your-base/test.ml +2 -2
  58. data/tracks/ocaml/exercises/beer-song/test.ml +25 -24
  59. data/tracks/ocaml/exercises/phone-number/test.ml +22 -22
  60. data/tracks/ocaml/exercises/run-length-encoding/test.ml +5 -5
  61. data/tracks/ocaml/exercises/word-count/test.ml +1 -1
  62. data/tracks/ocaml/tools/test-generator/templates/beer-song/template.ml +20 -1
  63. data/tracks/purescript/config.json +7 -0
  64. data/tracks/purescript/exercises/word-count/bower.json +17 -0
  65. data/tracks/purescript/exercises/word-count/examples/src/WordCount.purs +31 -0
  66. data/tracks/purescript/exercises/word-count/src/WordCount.purs +3 -0
  67. data/tracks/purescript/exercises/word-count/test/Main.purs +89 -0
  68. data/tracks/python/exercises/accumulate/accumulate.py +2 -0
  69. data/tracks/python/exercises/acronym/acronym.py +2 -0
  70. data/tracks/python/exercises/allergies/allergies.py +3 -0
  71. data/tracks/python/exercises/allergies/example.py +1 -1
  72. data/tracks/python/exercises/anagram/anagram.py +2 -0
  73. data/tracks/python/exercises/atbash-cipher/atbash_cipher.py +6 -0
  74. data/tracks/python/exercises/beer-song/beer_song.py +6 -0
  75. data/tracks/python/exercises/binary-search/binary_search.py +2 -0
  76. data/tracks/python/exercises/binary/binary.py +2 -0
  77. data/tracks/python/exercises/bob/bob.py +2 -8
  78. data/tracks/python/exercises/bracket-push/bracket_push.py +2 -0
  79. data/tracks/python/exercises/circular-buffer/circular_buffer.py +11 -0
  80. data/tracks/python/exercises/clock/clock.py +3 -0
  81. data/tracks/python/exercises/clock/example.py +1 -1
  82. data/tracks/python/exercises/crypto-square/crypto_square.py +2 -0
  83. data/tracks/python/exercises/diamond/diamond.py +2 -0
  84. data/tracks/python/exercises/difference-of-squares/difference_of_squares.py +10 -0
  85. data/tracks/python/exercises/etl/etl.py +2 -0
  86. data/tracks/python/exercises/flatten-array/flatten_array.py +2 -0
  87. data/tracks/python/exercises/gigasecond/gigasecond.py +2 -0
  88. data/tracks/python/exercises/grade-school/grade_school.py +3 -0
  89. data/tracks/python/exercises/grains/grains.py +6 -0
  90. data/tracks/python/exercises/hamming/hamming.py +2 -0
  91. data/tracks/python/exercises/hello-world/hello_world.py +2 -7
  92. data/tracks/python/exercises/hexadecimal/hexadecimal.py +2 -0
  93. data/tracks/python/exercises/house/house.py +6 -0
  94. data/tracks/python/exercises/kindergarten-garden/kindergarten_garden.py +3 -0
  95. data/tracks/python/exercises/largest-series-product/largest_series_product.py +2 -0
  96. data/tracks/python/exercises/leap/leap.py +2 -0
  97. data/tracks/python/exercises/linked-list/linked_list.py +2 -8
  98. data/tracks/python/exercises/list-ops/list_ops.py +18 -22
  99. data/tracks/python/exercises/luhn/luhn.py +3 -0
  100. data/tracks/python/exercises/matrix/matrix.py +3 -0
  101. data/tracks/python/exercises/meetup/meetup.py +2 -0
  102. data/tracks/python/exercises/minesweeper/minesweeper.py +2 -0
  103. data/tracks/python/exercises/nth-prime/nth_prime.py +2 -0
  104. data/tracks/python/exercises/nucleotide-count/nucleotide_count.py +6 -0
  105. data/tracks/python/exercises/ocr-numbers/ocr_numbers.py +6 -0
  106. data/tracks/python/exercises/ocr-numbers/{ocr_test.py → ocr_numbers_test.py} +0 -0
  107. data/tracks/python/exercises/octal/octal.py +2 -0
  108. data/tracks/python/exercises/palindrome-products/palindrome_products.py +6 -0
  109. data/tracks/python/exercises/pangram/pangram.py +2 -0
  110. data/tracks/python/exercises/pascals-triangle/pascals_triangle.py +10 -0
  111. data/tracks/python/exercises/perfect-numbers/perfect_numbers.py +6 -0
  112. data/tracks/python/exercises/phone-number/phone_number.py +3 -0
  113. data/tracks/python/exercises/pig-latin/pig_latin.py +2 -0
  114. data/tracks/python/exercises/point-mutations/point_mutations.py +2 -0
  115. data/tracks/python/exercises/poker/poker.py +2 -0
  116. data/tracks/python/exercises/prime-factors/prime_factors.py +2 -0
  117. data/tracks/python/exercises/proverb/proverb.py +2 -0
  118. data/tracks/python/exercises/pythagorean-triplet/pythagorean_triplet.py +10 -0
  119. data/tracks/python/exercises/queen-attack/queen_attack.py +6 -0
  120. data/tracks/python/exercises/rail-fence-cipher/rail_fence_cipher.py +10 -0
  121. data/tracks/python/exercises/raindrops/raindrops.py +2 -0
  122. data/tracks/python/exercises/rectangles/example.py +1 -1
  123. data/tracks/python/exercises/rectangles/rectangles.py +2 -0
  124. data/tracks/python/exercises/rectangles/{rectangles_count_test.py → rectangles_test.py} +0 -0
  125. data/tracks/python/exercises/rna-transcription/rna_transcription.py +2 -0
  126. data/tracks/python/exercises/robot-name/robot_name.py +3 -0
  127. data/tracks/python/exercises/robot-simulator/robot_simulator.py +3 -0
  128. data/tracks/python/exercises/roman-numerals/roman_numerals.py +2 -0
  129. data/tracks/python/exercises/run-length-encoding/run_length_encoding.py +6 -0
  130. data/tracks/python/exercises/run-length-encoding/{run_length_test.py → run_length_encoding_test.py} +1 -1
  131. data/tracks/python/exercises/saddle-points/saddle_points.py +2 -0
  132. data/tracks/python/exercises/say/example.py +1 -1
  133. data/tracks/python/exercises/say/say.py +2 -0
  134. data/tracks/python/exercises/say/say_test.py +3 -0
  135. data/tracks/python/exercises/scrabble-score/scrabble_score.py +2 -0
  136. data/tracks/python/exercises/secret-handshake/secret_handshake.py +6 -0
  137. data/tracks/python/exercises/secret-handshake/{handshake_test.py → secret_handshake_test.py} +0 -0
  138. data/tracks/python/exercises/series/series.py +2 -0
  139. data/tracks/python/exercises/sieve/sieve.py +2 -0
  140. data/tracks/python/exercises/simple-cipher/example.py +1 -1
  141. data/tracks/python/exercises/simple-cipher/simple_cipher.py +8 -0
  142. data/tracks/python/exercises/space-age/space_age.py +3 -0
  143. data/tracks/python/exercises/strain/strain.py +6 -0
  144. data/tracks/python/exercises/sublist/sublist.py +2 -0
  145. data/tracks/python/exercises/sum-of-multiples/sum_of_multiples.py +2 -0
  146. data/tracks/python/exercises/triangle/triangle.py +7 -0
  147. data/tracks/python/exercises/trinary/trinary.py +2 -0
  148. data/tracks/python/exercises/twelve-days/twelve_days.py +10 -0
  149. data/tracks/python/exercises/word-count/word_count.py +2 -0
  150. data/tracks/python/exercises/wordy/wordy.py +2 -0
  151. data/tracks/python/exercises/zebra-puzzle/zebra_puzzle.py +2 -0
  152. data/tracks/ruby/exercises/beer-song/.meta/.version +1 -0
  153. data/tracks/ruby/exercises/beer-song/beer_song_test.rb +62 -36
  154. data/tracks/ruby/exercises/beer-song/example.rb +1 -5
  155. data/tracks/ruby/exercises/beer-song/example.tt +22 -0
  156. data/tracks/ruby/lib/beer_song_cases.rb +43 -0
  157. data/tracks/swift/exercises/matrix/Tests/MatrixTests/MatrixTests.swift +1 -1
  158. metadata +94 -13
  159. data/common/bin/jsonlint +0 -27
  160. data/tracks/csharp/.paket/paket.bootstrapper.exe +0 -0
  161. data/tracks/csharp/Zipper.cs +0 -137
  162. data/tracks/csharp/build.cmd +0 -14
  163. data/tracks/csharp/build.fsx +0 -78
  164. data/tracks/csharp/paket.dependencies +0 -2
  165. data/tracks/csharp/paket.lock +0 -3
@@ -0,0 +1,2 @@
1
+ def score():
2
+ pass
@@ -0,0 +1,6 @@
1
+ def handshake():
2
+ pass
3
+
4
+
5
+ def code():
6
+ pass
@@ -0,0 +1,2 @@
1
+ def slices():
2
+ pass
@@ -0,0 +1,2 @@
1
+ def sieve():
2
+ pass
@@ -3,7 +3,7 @@ from time import time
3
3
  import random
4
4
 
5
5
 
6
- class Cipher:
6
+ class Cipher(object):
7
7
 
8
8
  def __init__(self, key=None):
9
9
  if not key:
@@ -0,0 +1,8 @@
1
+ class Cipher(object):
2
+ def __init__(self):
3
+ pass
4
+
5
+
6
+ class Caesar(object):
7
+ def __init__(self):
8
+ pass
@@ -0,0 +1,3 @@
1
+ class SpaceAge(object):
2
+ def __init__(self):
3
+ pass
@@ -0,0 +1,6 @@
1
+ def keep():
2
+ pass
3
+
4
+
5
+ def discard():
6
+ pass
@@ -0,0 +1,2 @@
1
+ def check_lists():
2
+ pass
@@ -0,0 +1,2 @@
1
+ def sum_of_multiples():
2
+ pass
@@ -0,0 +1,7 @@
1
+ class TriangleError(Exception):
2
+ pass
3
+
4
+
5
+ class Triangle(object):
6
+ def __init__(self):
7
+ pass
@@ -0,0 +1,2 @@
1
+ def trinary():
2
+ pass
@@ -0,0 +1,10 @@
1
+ def verse():
2
+ pass
3
+
4
+
5
+ def verses():
6
+ pass
7
+
8
+
9
+ def sing():
10
+ pass
@@ -0,0 +1,2 @@
1
+ def word_count():
2
+ pass
@@ -0,0 +1,2 @@
1
+ def calculate():
2
+ pass
@@ -0,0 +1,2 @@
1
+ def solution():
2
+ pass
@@ -1,69 +1,86 @@
1
1
  #!/usr/bin/env ruby
2
+ # encoding: utf-8
2
3
  gem 'minitest', '>= 5.0.0'
3
4
  require 'minitest/autorun'
4
5
  require_relative 'beer_song'
5
6
 
7
+ # Common test data version: 9f3d48a
6
8
  class BeerSongTest < Minitest::Test
7
- def test_the_first_verse
8
- expected = "99 bottles of beer on the wall, 99 bottles of beer.\n" \
9
- "Take one down and pass it around, 98 bottles of beer on the wall.\n"
9
+ def test_first_generic_verse
10
+ # skip
11
+ expected = <<-TEXT
12
+ 99 bottles of beer on the wall, 99 bottles of beer.
13
+ Take one down and pass it around, 98 bottles of beer on the wall.
14
+ TEXT
10
15
  assert_equal expected, BeerSong.new.verse(99)
11
16
  end
12
17
 
13
- def test_another_verse
18
+ def test_last_generic_verse
14
19
  skip
15
- expected = "3 bottles of beer on the wall, 3 bottles of beer.\n" \
16
- "Take one down and pass it around, 2 bottles of beer on the wall.\n"
20
+ expected = <<-TEXT
21
+ 3 bottles of beer on the wall, 3 bottles of beer.
22
+ Take one down and pass it around, 2 bottles of beer on the wall.
23
+ TEXT
17
24
  assert_equal expected, BeerSong.new.verse(3)
18
25
  end
19
26
 
20
27
  def test_verse_2
21
28
  skip
22
- expected = "2 bottles of beer on the wall, 2 bottles of beer.\n" \
23
- "Take one down and pass it around, 1 bottle of beer on the wall.\n"
29
+ expected = <<-TEXT
30
+ 2 bottles of beer on the wall, 2 bottles of beer.
31
+ Take one down and pass it around, 1 bottle of beer on the wall.
32
+ TEXT
24
33
  assert_equal expected, BeerSong.new.verse(2)
25
34
  end
26
35
 
27
36
  def test_verse_1
28
37
  skip
29
- expected = "1 bottle of beer on the wall, 1 bottle of beer.\n" \
30
- "Take it down and pass it around, no more bottles of beer on the wall.\n"
38
+ expected = <<-TEXT
39
+ 1 bottle of beer on the wall, 1 bottle of beer.
40
+ Take it down and pass it around, no more bottles of beer on the wall.
41
+ TEXT
31
42
  assert_equal expected, BeerSong.new.verse(1)
32
43
  end
33
44
 
34
45
  def test_verse_0
35
46
  skip
36
- expected = "No more bottles of beer on the wall, no more bottles of beer.\n" \
37
- "Go to the store and buy some more, 99 bottles of beer on the wall.\n"
47
+ expected = <<-TEXT
48
+ No more bottles of beer on the wall, no more bottles of beer.
49
+ Go to the store and buy some more, 99 bottles of beer on the wall.
50
+ TEXT
38
51
  assert_equal expected, BeerSong.new.verse(0)
39
52
  end
40
53
 
41
- def test_a_couple_verses
54
+ def test_first_two_verses
42
55
  skip
43
- expected = "99 bottles of beer on the wall, 99 bottles of beer.\n" \
44
- "Take one down and pass it around, 98 bottles of beer on the wall.\n" \
45
- "\n" \
46
- "98 bottles of beer on the wall, 98 bottles of beer.\n" \
47
- "Take one down and pass it around, 97 bottles of beer on the wall.\n"
56
+ expected = <<-TEXT
57
+ 99 bottles of beer on the wall, 99 bottles of beer.
58
+ Take one down and pass it around, 98 bottles of beer on the wall.
59
+
60
+ 98 bottles of beer on the wall, 98 bottles of beer.
61
+ Take one down and pass it around, 97 bottles of beer on the wall.
62
+ TEXT
48
63
  assert_equal expected, BeerSong.new.verses(99, 98)
49
64
  end
50
65
 
51
- def test_a_few_verses
66
+ def test_last_three_verses
52
67
  skip
53
- expected = "2 bottles of beer on the wall, 2 bottles of beer.\n" \
54
- "Take one down and pass it around, 1 bottle of beer on the wall.\n" \
55
- "\n" \
56
- "1 bottle of beer on the wall, 1 bottle of beer.\n" \
57
- "Take it down and pass it around, no more bottles of beer on the wall.\n" \
58
- "\n" \
59
- "No more bottles of beer on the wall, no more bottles of beer.\n" \
60
- "Go to the store and buy some more, 99 bottles of beer on the wall.\n"
68
+ expected = <<-TEXT
69
+ 2 bottles of beer on the wall, 2 bottles of beer.
70
+ Take one down and pass it around, 1 bottle of beer on the wall.
71
+
72
+ 1 bottle of beer on the wall, 1 bottle of beer.
73
+ Take it down and pass it around, no more bottles of beer on the wall.
74
+
75
+ No more bottles of beer on the wall, no more bottles of beer.
76
+ Go to the store and buy some more, 99 bottles of beer on the wall.
77
+ TEXT
61
78
  assert_equal expected, BeerSong.new.verses(2, 0)
62
79
  end
63
80
 
64
- def test_the_whole_song
81
+ def test_all_verses
65
82
  skip
66
- expected = <<-SONG
83
+ expected = <<-TEXT
67
84
  99 bottles of beer on the wall, 99 bottles of beer.
68
85
  Take one down and pass it around, 98 bottles of beer on the wall.
69
86
 
@@ -363,18 +380,27 @@ Take it down and pass it around, no more bottles of beer on the wall.
363
380
 
364
381
  No more bottles of beer on the wall, no more bottles of beer.
365
382
  Go to the store and buy some more, 99 bottles of beer on the wall.
366
- SONG
367
- assert_equal expected, BeerSong.new.lyrics
383
+ TEXT
384
+ assert_equal expected, BeerSong.new.verses(99, 0)
368
385
  end
369
-
370
- # Problems in exercism evolve over time,
371
- # as we find better ways to ask questions.
386
+ # Problems in exercism evolve over time, as we find better ways to ask
387
+ # questions.
372
388
  # The version number refers to the version of the problem you solved,
373
389
  # not your solution.
374
390
  #
375
- # Define a constant named VERSION inside of BookKeeping.
391
+ # Define a constant named VERSION inside of the top level BookKeeping
392
+ # module, which may be placed near the end of your file.
393
+ #
394
+ # In your file, it will look like this:
395
+ #
396
+ # module BookKeeping
397
+ # VERSION = 1 # Where the version number matches the one in the test.
398
+ # end
399
+ #
400
+ # If you are curious, read more about constants on RubyDoc:
401
+ # http://ruby-doc.org/docs/ruby-doc-bundle/UsersGuide/rg/constants.html
376
402
  def test_bookkeeping
377
403
  skip
378
- assert_equal 2, BookKeeping::VERSION
404
+ assert_equal 3, BookKeeping::VERSION
379
405
  end
380
406
  end
@@ -1,12 +1,8 @@
1
1
  module BookKeeping
2
- VERSION = 2
2
+ VERSION = 3
3
3
  end
4
4
 
5
5
  class BeerSong
6
- def lyrics
7
- verses(99, 0)
8
- end
9
-
10
6
  def verses(upper_bound, lower_bound)
11
7
  upper_bound.downto(lower_bound).map { |i| verse(i) }.join("\n")
12
8
  end
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+ gem 'minitest', '>= 5.0.0'
4
+ require 'minitest/autorun'
5
+ require_relative 'beer_song'
6
+
7
+ # Common test data version: <%= abbreviated_commit_hash %>
8
+ class BeerSongTest < Minitest::Test<% test_cases.each do |test_case| %>
9
+ def <%= test_case.test_name %>
10
+ <%= test_case.skipped %>
11
+ expected = <<-TEXT
12
+ <%= test_case.expected %>
13
+ TEXT
14
+ assert_equal expected, <%= test_case.workload %>
15
+ end
16
+ <% end %>
17
+ <%= IO.read(XRUBY_LIB + '/bookkeeping.md') %>
18
+ def test_bookkeeping
19
+ skip
20
+ assert_equal <%= version %>, BookKeeping::VERSION
21
+ end
22
+ end
@@ -0,0 +1,43 @@
1
+ require 'exercise_cases'
2
+
3
+ class BeerSongCase < OpenStruct
4
+ def test_name
5
+ 'test_%s' % description.tr(' ', '_')
6
+ end
7
+
8
+ def workload
9
+ "BeerSong.new.%s(%s)" % [property, workload_arguments]
10
+ end
11
+
12
+ def expected
13
+ self["expected"].gsub('\n', '"\n" \\')
14
+ end
15
+
16
+ def skipped
17
+ index.zero? ? '# skip' : 'skip'
18
+ end
19
+
20
+ private
21
+
22
+ def workload_arguments
23
+ if property == 'verse'
24
+ number
25
+ else
26
+ "%s, %s" % [self["beginning"], self["end"]]
27
+ end
28
+ end
29
+ end
30
+
31
+ BeerSongCases = proc do |data|
32
+ i = 0
33
+ cases = []
34
+ JSON.parse(data)["cases"].each do |section|
35
+ section["cases"].each do |tests|
36
+ tests["cases"].each do |test|
37
+ cases << BeerSongCase.new(test.merge('index' => i))
38
+ i += 1
39
+ end
40
+ end
41
+ end
42
+ cases
43
+ end
@@ -23,7 +23,7 @@ class MatrixTests: XCTestCase {
23
23
  }
24
24
 
25
25
  func testExtractAColumn() {
26
- let matrix = Matrix("1 2 3\n4 5 6\n7 8 9\n 8 7 6")
26
+ let matrix = Matrix("1 2 3\n4 5 6\n7 8 9\n8 7 6")
27
27
  XCTAssertEqual([1, 4, 7, 8], matrix.columns[0])
28
28
  }
29
29
 
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.18
4
+ version: 2.0.8.19
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-03-11 00:00:00.000000000 Z
11
+ date: 2017-03-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyzip
@@ -106,13 +106,13 @@ files:
106
106
  - bin/verify-configs
107
107
  - bin/verify-metadata
108
108
  - common/.git
109
+ - common/.gitignore
109
110
  - common/.travis.yml
110
111
  - common/CONTRIBUTING.md
111
112
  - common/LICENSE
112
113
  - common/README.md
113
114
  - common/TOPICS.txt
114
115
  - common/bin/check_required_files_present
115
- - common/bin/jsonlint
116
116
  - common/canonical-schema.json
117
117
  - common/exercises/accumulate/description.md
118
118
  - common/exercises/accumulate/metadata.yml
@@ -423,6 +423,8 @@ files:
423
423
  - common/exercises/zebra-puzzle/metadata.yml
424
424
  - common/exercises/zipper/description.md
425
425
  - common/exercises/zipper/metadata.yml
426
+ - common/package.json
427
+ - common/yarn.lock
426
428
  - fixtures/common/exercises/apple/canonical-data.json
427
429
  - fixtures/common/exercises/apple/description.md
428
430
  - fixtures/common/exercises/apple/metadata.yml
@@ -1345,16 +1347,14 @@ files:
1345
1347
  - tracks/crystal/src/generator/spec/exercise_test_case_spec.cr
1346
1348
  - tracks/csharp/.git
1347
1349
  - tracks/csharp/.gitignore
1348
- - tracks/csharp/.paket/paket.bootstrapper.exe
1349
1350
  - tracks/csharp/.travis.yml
1350
1351
  - tracks/csharp/LICENSE
1351
1352
  - tracks/csharp/README.md
1352
1353
  - tracks/csharp/SETUP.md
1353
- - tracks/csharp/Zipper.cs
1354
1354
  - tracks/csharp/appveyor.yml
1355
1355
  - tracks/csharp/bin/fetch-configlet
1356
- - tracks/csharp/build.cmd
1357
- - tracks/csharp/build.fsx
1356
+ - tracks/csharp/build.cake
1357
+ - tracks/csharp/build.ps1
1358
1358
  - tracks/csharp/build.sh
1359
1359
  - tracks/csharp/circle.yml
1360
1360
  - tracks/csharp/config.json
@@ -1788,8 +1788,6 @@ files:
1788
1788
  - tracks/csharp/exercises/zipper/Zipper.csproj
1789
1789
  - tracks/csharp/exercises/zipper/ZipperTest.cs
1790
1790
  - tracks/csharp/img/icon.png
1791
- - tracks/csharp/paket.dependencies
1792
- - tracks/csharp/paket.lock
1793
1791
  - tracks/delphi/.git
1794
1792
  - tracks/delphi/.gitignore
1795
1793
  - tracks/delphi/.travis.yml
@@ -1861,6 +1859,9 @@ files:
1861
1859
  - tracks/delphi/exercises/leap/Leap.dpr
1862
1860
  - tracks/delphi/exercises/leap/uLeapExample.pas
1863
1861
  - tracks/delphi/exercises/leap/uLeapTests.pas
1862
+ - tracks/delphi/exercises/minesweeper/MineSweeper.dpr
1863
+ - tracks/delphi/exercises/minesweeper/uMineSweeperExample.pas
1864
+ - tracks/delphi/exercises/minesweeper/uMineSweeperTest.pas
1864
1865
  - tracks/delphi/exercises/nucleotide-count/NucleotideCount.dpr
1865
1866
  - tracks/delphi/exercises/nucleotide-count/uNucleotideCountExample.pas
1866
1867
  - tracks/delphi/exercises/nucleotide-count/uNucleotideCountTest.pas
@@ -2464,6 +2465,9 @@ files:
2464
2465
  - tracks/elixir/exercises/roman-numerals/example.exs
2465
2466
  - tracks/elixir/exercises/roman-numerals/roman.exs
2466
2467
  - tracks/elixir/exercises/roman-numerals/roman_numerals_test.exs
2468
+ - tracks/elixir/exercises/rotational-cipher/example.exs
2469
+ - tracks/elixir/exercises/rotational-cipher/rotational_cipher.exs
2470
+ - tracks/elixir/exercises/rotational-cipher/rotational_cipher_test.exs
2467
2471
  - tracks/elixir/exercises/run-length-encoding/example.exs
2468
2472
  - tracks/elixir/exercises/run-length-encoding/rle.exs
2469
2473
  - tracks/elixir/exercises/run-length-encoding/rle_test.exs
@@ -6341,6 +6345,10 @@ files:
6341
6345
  - tracks/purescript/exercises/triangle/examples/src/Triangle.purs
6342
6346
  - tracks/purescript/exercises/triangle/src/Triangle.purs
6343
6347
  - tracks/purescript/exercises/triangle/test/Main.purs
6348
+ - tracks/purescript/exercises/word-count/bower.json
6349
+ - tracks/purescript/exercises/word-count/examples/src/WordCount.purs
6350
+ - tracks/purescript/exercises/word-count/src/WordCount.purs
6351
+ - tracks/purescript/exercises/word-count/test/Main.purs
6344
6352
  - tracks/purescript/img/icon.png
6345
6353
  - tracks/python/.git
6346
6354
  - tracks/python/.gitignore
@@ -6360,65 +6368,90 @@ files:
6360
6368
  - tracks/python/docs/img/AddFiles.png
6361
6369
  - tracks/python/docs/img/SolutionExplorer.png
6362
6370
  - tracks/python/docs/img/TestExplorer.png
6371
+ - tracks/python/exercises/accumulate/accumulate.py
6363
6372
  - tracks/python/exercises/accumulate/accumulate_test.py
6364
6373
  - tracks/python/exercises/accumulate/example.py
6374
+ - tracks/python/exercises/acronym/acronym.py
6365
6375
  - tracks/python/exercises/acronym/acronym_test.py
6366
6376
  - tracks/python/exercises/acronym/example.py
6367
6377
  - tracks/python/exercises/all-your-base/all_your_base_test.py
6368
6378
  - tracks/python/exercises/all-your-base/example.py
6379
+ - tracks/python/exercises/allergies/allergies.py
6369
6380
  - tracks/python/exercises/allergies/allergies_test.py
6370
6381
  - tracks/python/exercises/allergies/example.py
6382
+ - tracks/python/exercises/anagram/anagram.py
6371
6383
  - tracks/python/exercises/anagram/anagram_test.py
6372
6384
  - tracks/python/exercises/anagram/example.py
6385
+ - tracks/python/exercises/atbash-cipher/atbash_cipher.py
6373
6386
  - tracks/python/exercises/atbash-cipher/atbash_cipher_test.py
6374
6387
  - tracks/python/exercises/atbash-cipher/example.py
6388
+ - tracks/python/exercises/beer-song/beer_song.py
6375
6389
  - tracks/python/exercises/beer-song/beer_song_test.py
6376
6390
  - tracks/python/exercises/beer-song/example.py
6391
+ - tracks/python/exercises/binary-search/binary_search.py
6377
6392
  - tracks/python/exercises/binary-search/binary_search_test.py
6378
6393
  - tracks/python/exercises/binary-search/example.py
6394
+ - tracks/python/exercises/binary/binary.py
6379
6395
  - tracks/python/exercises/binary/binary_test.py
6380
6396
  - tracks/python/exercises/binary/example.py
6381
6397
  - tracks/python/exercises/bob/bob.py
6382
6398
  - tracks/python/exercises/bob/bob_test.py
6383
6399
  - tracks/python/exercises/bob/example.py
6400
+ - tracks/python/exercises/bracket-push/bracket_push.py
6384
6401
  - tracks/python/exercises/bracket-push/bracket_push_test.py
6385
6402
  - tracks/python/exercises/bracket-push/example.py
6403
+ - tracks/python/exercises/circular-buffer/circular_buffer.py
6386
6404
  - tracks/python/exercises/circular-buffer/circular_buffer_test.py
6387
6405
  - tracks/python/exercises/circular-buffer/example.py
6406
+ - tracks/python/exercises/clock/clock.py
6388
6407
  - tracks/python/exercises/clock/clock_test.py
6389
6408
  - tracks/python/exercises/clock/example.py
6409
+ - tracks/python/exercises/crypto-square/crypto_square.py
6390
6410
  - tracks/python/exercises/crypto-square/crypto_square_test.py
6391
6411
  - tracks/python/exercises/crypto-square/example.py
6412
+ - tracks/python/exercises/diamond/diamond.py
6392
6413
  - tracks/python/exercises/diamond/diamond_test.py
6393
6414
  - tracks/python/exercises/diamond/example.py
6415
+ - tracks/python/exercises/difference-of-squares/difference_of_squares.py
6394
6416
  - tracks/python/exercises/difference-of-squares/difference_of_squares_test.py
6395
6417
  - tracks/python/exercises/difference-of-squares/example.py
6418
+ - tracks/python/exercises/etl/etl.py
6396
6419
  - tracks/python/exercises/etl/etl_test.py
6397
6420
  - tracks/python/exercises/etl/example.py
6398
6421
  - tracks/python/exercises/flatten-array/example.py
6422
+ - tracks/python/exercises/flatten-array/flatten_array.py
6399
6423
  - tracks/python/exercises/flatten-array/flatten_array_test.py
6400
6424
  - tracks/python/exercises/gigasecond/example.py
6425
+ - tracks/python/exercises/gigasecond/gigasecond.py
6401
6426
  - tracks/python/exercises/gigasecond/gigasecond_test.py
6402
6427
  - tracks/python/exercises/grade-school/example.py
6428
+ - tracks/python/exercises/grade-school/grade_school.py
6403
6429
  - tracks/python/exercises/grade-school/grade_school_test.py
6404
6430
  - tracks/python/exercises/grains/example.py
6431
+ - tracks/python/exercises/grains/grains.py
6405
6432
  - tracks/python/exercises/grains/grains_test.py
6406
6433
  - tracks/python/exercises/grep/example.py
6407
6434
  - tracks/python/exercises/grep/grep_test.py
6408
6435
  - tracks/python/exercises/hamming/example.py
6436
+ - tracks/python/exercises/hamming/hamming.py
6409
6437
  - tracks/python/exercises/hamming/hamming_test.py
6410
6438
  - tracks/python/exercises/hello-world/example.py
6411
6439
  - tracks/python/exercises/hello-world/hello_world.py
6412
6440
  - tracks/python/exercises/hello-world/hello_world_test.py
6413
6441
  - tracks/python/exercises/hexadecimal/example.py
6442
+ - tracks/python/exercises/hexadecimal/hexadecimal.py
6414
6443
  - tracks/python/exercises/hexadecimal/hexadecimal_test.py
6415
6444
  - tracks/python/exercises/house/example.py
6445
+ - tracks/python/exercises/house/house.py
6416
6446
  - tracks/python/exercises/house/house_test.py
6417
6447
  - tracks/python/exercises/kindergarten-garden/example.py
6448
+ - tracks/python/exercises/kindergarten-garden/kindergarten_garden.py
6418
6449
  - tracks/python/exercises/kindergarten-garden/kindergarten_garden_test.py
6419
6450
  - tracks/python/exercises/largest-series-product/example.py
6451
+ - tracks/python/exercises/largest-series-product/largest_series_product.py
6420
6452
  - tracks/python/exercises/largest-series-product/largest_series_product_test.py
6421
6453
  - tracks/python/exercises/leap/example.py
6454
+ - tracks/python/exercises/leap/leap.py
6422
6455
  - tracks/python/exercises/leap/leap_test.py
6423
6456
  - tracks/python/exercises/linked-list/example.py
6424
6457
  - tracks/python/exercises/linked-list/linked_list.py
@@ -6427,97 +6460,142 @@ files:
6427
6460
  - tracks/python/exercises/list-ops/list_ops.py
6428
6461
  - tracks/python/exercises/list-ops/list_ops_test.py
6429
6462
  - tracks/python/exercises/luhn/example.py
6463
+ - tracks/python/exercises/luhn/luhn.py
6430
6464
  - tracks/python/exercises/luhn/luhn_test.py
6431
6465
  - tracks/python/exercises/matrix/example.py
6466
+ - tracks/python/exercises/matrix/matrix.py
6432
6467
  - tracks/python/exercises/matrix/matrix_test.py
6433
6468
  - tracks/python/exercises/meetup/example.py
6469
+ - tracks/python/exercises/meetup/meetup.py
6434
6470
  - tracks/python/exercises/meetup/meetup_test.py
6435
6471
  - tracks/python/exercises/minesweeper/example.py
6472
+ - tracks/python/exercises/minesweeper/minesweeper.py
6436
6473
  - tracks/python/exercises/minesweeper/minesweeper_test.py
6437
6474
  - tracks/python/exercises/nth-prime/example.py
6475
+ - tracks/python/exercises/nth-prime/nth_prime.py
6438
6476
  - tracks/python/exercises/nth-prime/nth_prime_test.py
6439
6477
  - tracks/python/exercises/nucleotide-count/example.py
6478
+ - tracks/python/exercises/nucleotide-count/nucleotide_count.py
6440
6479
  - tracks/python/exercises/nucleotide-count/nucleotide_count_test.py
6441
6480
  - tracks/python/exercises/ocr-numbers/example.py
6442
- - tracks/python/exercises/ocr-numbers/ocr_test.py
6481
+ - tracks/python/exercises/ocr-numbers/ocr_numbers.py
6482
+ - tracks/python/exercises/ocr-numbers/ocr_numbers_test.py
6443
6483
  - tracks/python/exercises/octal/example.py
6484
+ - tracks/python/exercises/octal/octal.py
6444
6485
  - tracks/python/exercises/octal/octal_test.py
6445
6486
  - tracks/python/exercises/palindrome-products/example.py
6487
+ - tracks/python/exercises/palindrome-products/palindrome_products.py
6446
6488
  - tracks/python/exercises/palindrome-products/palindrome_products_test.py
6447
6489
  - tracks/python/exercises/pangram/example.py
6490
+ - tracks/python/exercises/pangram/pangram.py
6448
6491
  - tracks/python/exercises/pangram/pangram_test.py
6449
6492
  - tracks/python/exercises/pascals-triangle/example.py
6493
+ - tracks/python/exercises/pascals-triangle/pascals_triangle.py
6450
6494
  - tracks/python/exercises/pascals-triangle/pascals_triangle_test.py
6451
6495
  - tracks/python/exercises/perfect-numbers/example.py
6496
+ - tracks/python/exercises/perfect-numbers/perfect_numbers.py
6452
6497
  - tracks/python/exercises/perfect-numbers/perfect_numbers_test.py
6453
6498
  - tracks/python/exercises/phone-number/example.py
6499
+ - tracks/python/exercises/phone-number/phone_number.py
6454
6500
  - tracks/python/exercises/phone-number/phone_number_test.py
6455
6501
  - tracks/python/exercises/pig-latin/example.py
6502
+ - tracks/python/exercises/pig-latin/pig_latin.py
6456
6503
  - tracks/python/exercises/pig-latin/pig_latin_test.py
6457
6504
  - tracks/python/exercises/point-mutations/example.py
6505
+ - tracks/python/exercises/point-mutations/point_mutations.py
6458
6506
  - tracks/python/exercises/point-mutations/point_mutations_test.py
6459
6507
  - tracks/python/exercises/poker/example.py
6508
+ - tracks/python/exercises/poker/poker.py
6460
6509
  - tracks/python/exercises/poker/poker_test.py
6461
6510
  - tracks/python/exercises/prime-factors/example.py
6511
+ - tracks/python/exercises/prime-factors/prime_factors.py
6462
6512
  - tracks/python/exercises/prime-factors/prime_factors_test.py
6463
6513
  - tracks/python/exercises/proverb/example.py
6514
+ - tracks/python/exercises/proverb/proverb.py
6464
6515
  - tracks/python/exercises/proverb/proverb_test.py
6465
6516
  - tracks/python/exercises/pythagorean-triplet/example.py
6517
+ - tracks/python/exercises/pythagorean-triplet/pythagorean_triplet.py
6466
6518
  - tracks/python/exercises/pythagorean-triplet/pythagorean_triplet_test.py
6467
6519
  - tracks/python/exercises/queen-attack/example.py
6520
+ - tracks/python/exercises/queen-attack/queen_attack.py
6468
6521
  - tracks/python/exercises/queen-attack/queen_attack_test.py
6469
6522
  - tracks/python/exercises/rail-fence-cipher/example.py
6523
+ - tracks/python/exercises/rail-fence-cipher/rail_fence_cipher.py
6470
6524
  - tracks/python/exercises/rail-fence-cipher/rail_fence_cipher_test.py
6471
6525
  - tracks/python/exercises/raindrops/example.py
6526
+ - tracks/python/exercises/raindrops/raindrops.py
6472
6527
  - tracks/python/exercises/raindrops/raindrops_test.py
6473
6528
  - tracks/python/exercises/rectangles/example.py
6474
- - tracks/python/exercises/rectangles/rectangles_count_test.py
6529
+ - tracks/python/exercises/rectangles/rectangles.py
6530
+ - tracks/python/exercises/rectangles/rectangles_test.py
6475
6531
  - tracks/python/exercises/rna-transcription/example.py
6532
+ - tracks/python/exercises/rna-transcription/rna_transcription.py
6476
6533
  - tracks/python/exercises/rna-transcription/rna_transcription_test.py
6477
6534
  - tracks/python/exercises/robot-name/example.py
6535
+ - tracks/python/exercises/robot-name/robot_name.py
6478
6536
  - tracks/python/exercises/robot-name/robot_name_test.py
6479
6537
  - tracks/python/exercises/robot-simulator/example.py
6538
+ - tracks/python/exercises/robot-simulator/robot_simulator.py
6480
6539
  - tracks/python/exercises/robot-simulator/robot_simulator_test.py
6481
6540
  - tracks/python/exercises/roman-numerals/example.py
6541
+ - tracks/python/exercises/roman-numerals/roman_numerals.py
6482
6542
  - tracks/python/exercises/roman-numerals/roman_numerals_test.py
6483
6543
  - tracks/python/exercises/run-length-encoding/example.py
6484
- - tracks/python/exercises/run-length-encoding/run_length_test.py
6544
+ - tracks/python/exercises/run-length-encoding/run_length_encoding.py
6545
+ - tracks/python/exercises/run-length-encoding/run_length_encoding_test.py
6485
6546
  - tracks/python/exercises/saddle-points/example.py
6547
+ - tracks/python/exercises/saddle-points/saddle_points.py
6486
6548
  - tracks/python/exercises/saddle-points/saddle_points_test.py
6487
6549
  - tracks/python/exercises/say/example.py
6550
+ - tracks/python/exercises/say/say.py
6488
6551
  - tracks/python/exercises/say/say_test.py
6489
6552
  - tracks/python/exercises/scrabble-score/example.py
6553
+ - tracks/python/exercises/scrabble-score/scrabble_score.py
6490
6554
  - tracks/python/exercises/scrabble-score/scrabble_score_test.py
6491
6555
  - tracks/python/exercises/secret-handshake/example.py
6492
- - tracks/python/exercises/secret-handshake/handshake_test.py
6556
+ - tracks/python/exercises/secret-handshake/secret_handshake.py
6557
+ - tracks/python/exercises/secret-handshake/secret_handshake_test.py
6493
6558
  - tracks/python/exercises/series/example.py
6559
+ - tracks/python/exercises/series/series.py
6494
6560
  - tracks/python/exercises/series/series_test.py
6495
6561
  - tracks/python/exercises/sieve/example.py
6562
+ - tracks/python/exercises/sieve/sieve.py
6496
6563
  - tracks/python/exercises/sieve/sieve_test.py
6497
6564
  - tracks/python/exercises/simple-cipher/example.py
6565
+ - tracks/python/exercises/simple-cipher/simple_cipher.py
6498
6566
  - tracks/python/exercises/simple-cipher/simple_cipher_test.py
6499
6567
  - tracks/python/exercises/space-age/example.py
6568
+ - tracks/python/exercises/space-age/space_age.py
6500
6569
  - tracks/python/exercises/space-age/space_age_test.py
6501
6570
  - tracks/python/exercises/strain/example.py
6571
+ - tracks/python/exercises/strain/strain.py
6502
6572
  - tracks/python/exercises/strain/strain_test.py
6503
6573
  - tracks/python/exercises/sublist/example.py
6574
+ - tracks/python/exercises/sublist/sublist.py
6504
6575
  - tracks/python/exercises/sublist/sublist_test.py
6505
6576
  - tracks/python/exercises/sum-of-multiples/example.py
6577
+ - tracks/python/exercises/sum-of-multiples/sum_of_multiples.py
6506
6578
  - tracks/python/exercises/sum-of-multiples/sum_of_multiples_test.py
6507
6579
  - tracks/python/exercises/triangle/example.py
6580
+ - tracks/python/exercises/triangle/triangle.py
6508
6581
  - tracks/python/exercises/triangle/triangle_test.py
6509
6582
  - tracks/python/exercises/trinary/example.py
6583
+ - tracks/python/exercises/trinary/trinary.py
6510
6584
  - tracks/python/exercises/trinary/trinary_test.py
6511
6585
  - tracks/python/exercises/twelve-days/example.py
6586
+ - tracks/python/exercises/twelve-days/twelve_days.py
6512
6587
  - tracks/python/exercises/twelve-days/twelve_days_test.py
6513
6588
  - tracks/python/exercises/word-count/example.py
6589
+ - tracks/python/exercises/word-count/word_count.py
6514
6590
  - tracks/python/exercises/word-count/word_count_test.py
6515
6591
  - tracks/python/exercises/word-search/example.py
6516
6592
  - tracks/python/exercises/word-search/word_search.py
6517
6593
  - tracks/python/exercises/word-search/word_search_test.py
6518
6594
  - tracks/python/exercises/wordy/example.py
6595
+ - tracks/python/exercises/wordy/wordy.py
6519
6596
  - tracks/python/exercises/wordy/wordy_test.py
6520
6597
  - tracks/python/exercises/zebra-puzzle/example.py
6598
+ - tracks/python/exercises/zebra-puzzle/zebra_puzzle.py
6521
6599
  - tracks/python/exercises/zebra-puzzle/zebra_puzzle_test.py
6522
6600
  - tracks/python/img/icon.png
6523
6601
  - tracks/python/requirements-travis.txt
@@ -6707,8 +6785,10 @@ files:
6707
6785
  - tracks/ruby/exercises/anagram/example.tt
6708
6786
  - tracks/ruby/exercises/atbash-cipher/atbash_cipher_test.rb
6709
6787
  - tracks/ruby/exercises/atbash-cipher/example.rb
6788
+ - tracks/ruby/exercises/beer-song/.meta/.version
6710
6789
  - tracks/ruby/exercises/beer-song/beer_song_test.rb
6711
6790
  - tracks/ruby/exercises/beer-song/example.rb
6791
+ - tracks/ruby/exercises/beer-song/example.tt
6712
6792
  - tracks/ruby/exercises/binary-search-tree/binary_search_tree_test.rb
6713
6793
  - tracks/ruby/exercises/binary-search-tree/example.rb
6714
6794
  - tracks/ruby/exercises/binary-search/binary_search_test.rb
@@ -6934,6 +7014,7 @@ files:
6934
7014
  - tracks/ruby/lib/all_your_base_cases.rb
6935
7015
  - tracks/ruby/lib/alphametics_cases.rb
6936
7016
  - tracks/ruby/lib/anagram_cases.rb
7017
+ - tracks/ruby/lib/beer_song_cases.rb
6937
7018
  - tracks/ruby/lib/binary_cases.rb
6938
7019
  - tracks/ruby/lib/bookkeeping.md
6939
7020
  - tracks/ruby/lib/bowling_cases.rb