trackler 2.0.3.2 → 2.0.3.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (106) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/tracks/c/config.json +10 -0
  4. data/tracks/c/exercises/robot-simulator/makefile +16 -0
  5. data/tracks/c/exercises/robot-simulator/src/example.c +74 -0
  6. data/tracks/c/exercises/robot-simulator/src/robot_simulator.h +41 -0
  7. data/tracks/c/exercises/robot-simulator/test/test_robot_simulator.c +165 -0
  8. data/tracks/c/exercises/robot-simulator/test/vendor/unity.c +1300 -0
  9. data/tracks/c/exercises/robot-simulator/test/vendor/unity.h +274 -0
  10. data/tracks/c/exercises/robot-simulator/test/vendor/unity_internals.h +701 -0
  11. data/tracks/ecmascript/exercises/rna-transcription/example.js +9 -2
  12. data/tracks/ecmascript/exercises/rna-transcription/rna-transcription.spec.js +18 -0
  13. data/tracks/go/exercises/hello-world/example.go +4 -2
  14. data/tracks/go/exercises/hello-world/hello_test.go +4 -4
  15. data/tracks/go/exercises/hello-world/hello_world.go +6 -6
  16. data/tracks/groovy/config.json +5 -0
  17. data/tracks/groovy/exercises/phone-number/Example.groovy +20 -0
  18. data/tracks/groovy/exercises/phone-number/PhoneNumberSpec.groovy +75 -0
  19. data/tracks/haskell/exercises/difference-of-squares/test/Tests.hs +2 -0
  20. data/tracks/java/config.json +13 -1
  21. data/tracks/java/exercises/all-your-base/build.gradle +17 -0
  22. data/tracks/java/exercises/all-your-base/src/example/java/BaseConverter.java +80 -0
  23. data/tracks/java/exercises/all-your-base/src/main/java/BaseConverter.java +5 -0
  24. data/tracks/java/exercises/all-your-base/src/test/java/BaseConverterTest.java +256 -0
  25. data/tracks/java/exercises/binary-search/build.gradle +17 -0
  26. data/tracks/java/exercises/binary-search/src/example/java/BinarySearch.java +40 -0
  27. data/tracks/java/exercises/binary-search/src/main/java/.keep +0 -0
  28. data/tracks/java/exercises/binary-search/src/main/java/BinarySearch.java +4 -0
  29. data/tracks/java/exercises/binary-search/src/test/java/.keep +0 -0
  30. data/tracks/java/exercises/binary-search/src/test/java/BinarySearchTest.java +136 -0
  31. data/tracks/java/exercises/settings.gradle +1 -0
  32. data/tracks/lua/config.json +16 -0
  33. data/tracks/lua/exercises/say/example.lua +92 -0
  34. data/tracks/lua/exercises/say/say_spec.lua +105 -0
  35. data/tracks/lua/exercises/secret-handshake/example.lua +17 -0
  36. data/tracks/lua/exercises/secret-handshake/secret-handshake_spec.lua +38 -0
  37. data/tracks/ocaml/config.json +10 -1
  38. data/tracks/ocaml/exercises/bracket-push/.merlin +3 -0
  39. data/tracks/ocaml/exercises/bracket-push/Makefile +11 -0
  40. data/tracks/ocaml/exercises/bracket-push/bracket_push.mli +3 -0
  41. data/tracks/ocaml/exercises/bracket-push/example.ml +40 -0
  42. data/tracks/ocaml/exercises/bracket-push/test.ml +38 -0
  43. data/tracks/ocaml/exercises/leap/test.ml +7 -7
  44. data/tracks/ocaml/tools/test-generator/Makefile +2 -2
  45. data/tracks/ocaml/tools/test-generator/interfaces/codegen.mli +2 -2
  46. data/tracks/ocaml/tools/test-generator/interfaces/{test_generator.mli → controller.mli} +0 -0
  47. data/tracks/ocaml/tools/test-generator/interfaces/parser.mli +7 -1
  48. data/tracks/ocaml/tools/test-generator/interfaces/special_cases.mli +2 -2
  49. data/tracks/ocaml/tools/test-generator/interfaces/utils.mli +4 -0
  50. data/tracks/ocaml/tools/test-generator/src/codegen.ml +9 -5
  51. data/tracks/ocaml/tools/test-generator/src/{test_generator.ml → controller.ml} +24 -15
  52. data/tracks/ocaml/tools/test-generator/src/model.ml +6 -0
  53. data/tracks/ocaml/tools/test-generator/src/parser.ml +34 -7
  54. data/tracks/ocaml/tools/test-generator/src/special_cases.ml +11 -4
  55. data/tracks/ocaml/tools/test-generator/src/template.ml +49 -6
  56. data/tracks/ocaml/tools/test-generator/src/test_gen.ml +1 -1
  57. data/tracks/ocaml/tools/test-generator/src/utils.ml +6 -0
  58. data/tracks/ocaml/tools/test-generator/templates/anagram/template.ml +2 -2
  59. data/tracks/ocaml/tools/test-generator/templates/bob/template.ml +2 -2
  60. data/tracks/ocaml/tools/test-generator/templates/bracket-push/template.ml +16 -0
  61. data/tracks/ocaml/tools/test-generator/templates/difference-of-squares/template.ml +19 -0
  62. data/tracks/ocaml/tools/test-generator/templates/hamming/template.ml +2 -2
  63. data/tracks/ocaml/tools/test-generator/templates/hello-world/template.ml +2 -2
  64. data/tracks/ocaml/tools/test-generator/templates/leap/template.ml +2 -2
  65. data/tracks/ocaml/tools/test-generator/templates/raindrops/template.ml +2 -2
  66. data/tracks/ocaml/tools/test-generator/templates/say/template.ml +3 -3
  67. data/tracks/ocaml/tools/test-generator/templates/word-count/template.ml +2 -2
  68. data/tracks/ocaml/tools/test-generator/test/all_tests.ml +3 -1
  69. data/tracks/ocaml/tools/test-generator/test/codegen_test.ml +7 -7
  70. data/tracks/ocaml/tools/test-generator/test/difference_of_squares.json +67 -0
  71. data/tracks/ocaml/tools/test-generator/test/hello_world.json +23 -0
  72. data/tracks/ocaml/tools/test-generator/test/parser_test.ml +30 -12
  73. data/tracks/ocaml/tools/test-generator/test/sample-suite-template.txt +16 -0
  74. data/tracks/ocaml/tools/test-generator/test/sample_template.txt +2 -2
  75. data/tracks/ocaml/tools/test-generator/test/special_cases_test.ml +1 -1
  76. data/tracks/ocaml/tools/test-generator/test/template_test.ml +40 -6
  77. data/tracks/perl6/.travis.yml +3 -0
  78. data/tracks/perl6/docs/RESOURCES.md +1 -1
  79. data/tracks/perl6/exercises/accumulate/accumulate.t +3 -7
  80. data/tracks/perl6/exercises/anagram/anagram.t +3 -7
  81. data/tracks/perl6/exercises/binary/binary.t +3 -7
  82. data/tracks/perl6/exercises/bob/bob.t +4 -8
  83. data/tracks/perl6/exercises/grains/grains.t +3 -7
  84. data/tracks/perl6/exercises/leap/leap.t +3 -7
  85. data/tracks/perl6/exercises/rna-transcription/rna_transcription.t +4 -8
  86. data/tracks/perl6/exercises/robot-name/robot.t +4 -8
  87. data/tracks/perl6/exercises/scrabble-score/scrabble_score.t +3 -7
  88. data/tracks/perl6/exercises/word-count/word_count.t +3 -8
  89. data/tracks/r/config.json +10 -0
  90. data/tracks/r/docs/ABOUT.md +14 -0
  91. data/tracks/r/exercises/difference-of-squares/difference-of-squares.R +5 -0
  92. data/tracks/r/exercises/difference-of-squares/example.R +6 -0
  93. data/tracks/r/exercises/difference-of-squares/test_difference-of-squares.R +23 -0
  94. data/tracks/r/exercises/hamming/example.R +8 -0
  95. data/tracks/r/exercises/hamming/hamming.R +4 -0
  96. data/tracks/r/exercises/hamming/test_hamming.R +87 -0
  97. data/tracks/ruby/exercises/binary/.version +1 -1
  98. data/tracks/ruby/exercises/binary/binary_test.rb +17 -19
  99. data/tracks/ruby/exercises/binary/example.rb +13 -13
  100. data/tracks/ruby/exercises/isogram/.version +1 -1
  101. data/tracks/ruby/exercises/isogram/example.rb +1 -1
  102. data/tracks/ruby/exercises/isogram/isogram_test.rb +16 -30
  103. data/tracks/ruby/lib/binary_cases.rb +2 -3
  104. data/tracks/ruby/lib/isogram_cases.rb +1 -5
  105. data/tracks/scala/exercises/phone-number/HINTS.md +9 -0
  106. metadata +45 -4
@@ -1 +1 @@
1
- 2
1
+ 3
@@ -5,83 +5,82 @@ require 'minitest/autorun'
5
5
  require_relative 'binary'
6
6
 
7
7
  # Test data version:
8
- # 01092b0
8
+ # 82eb00d
9
9
  class BinaryTest < Minitest::Test
10
10
  def test_binary_0_is_decimal_0
11
11
  # skip
12
- assert_equal 0, Binary.new('0').to_decimal
12
+ assert_equal 0, Binary.to_decimal('0')
13
13
  end
14
14
 
15
15
  def test_binary_1_is_decimal_1
16
16
  skip
17
- assert_equal 1, Binary.new('1').to_decimal
17
+ assert_equal 1, Binary.to_decimal('1')
18
18
  end
19
19
 
20
20
  def test_binary_10_is_decimal_2
21
21
  skip
22
- assert_equal 2, Binary.new('10').to_decimal
22
+ assert_equal 2, Binary.to_decimal('10')
23
23
  end
24
24
 
25
25
  def test_binary_11_is_decimal_3
26
26
  skip
27
- assert_equal 3, Binary.new('11').to_decimal
27
+ assert_equal 3, Binary.to_decimal('11')
28
28
  end
29
29
 
30
30
  def test_binary_100_is_decimal_4
31
31
  skip
32
- assert_equal 4, Binary.new('100').to_decimal
32
+ assert_equal 4, Binary.to_decimal('100')
33
33
  end
34
34
 
35
35
  def test_binary_1001_is_decimal_9
36
36
  skip
37
- assert_equal 9, Binary.new('1001').to_decimal
37
+ assert_equal 9, Binary.to_decimal('1001')
38
38
  end
39
39
 
40
40
  def test_binary_11010_is_decimal_26
41
41
  skip
42
- assert_equal 26, Binary.new('11010').to_decimal
42
+ assert_equal 26, Binary.to_decimal('11010')
43
43
  end
44
44
 
45
45
  def test_binary_10001101000_is_decimal_1128
46
46
  skip
47
- assert_equal 1128, Binary.new('10001101000').to_decimal
47
+ assert_equal 1128, Binary.to_decimal('10001101000')
48
48
  end
49
49
 
50
50
  def test_binary_ignores_leading_zeros
51
51
  skip
52
- assert_equal 31, Binary.new('000011111').to_decimal
52
+ assert_equal 31, Binary.to_decimal('000011111')
53
53
  end
54
54
 
55
55
  def test_2_is_not_a_valid_binary_digit
56
56
  skip
57
- assert_raises(ArgumentError) { Binary.new('2') }
57
+ assert_raises(ArgumentError) { Binary.to_decimal('2') }
58
58
  end
59
59
 
60
60
  def test_a_number_containing_a_non_binary_digit_is_invalid
61
61
  skip
62
- assert_raises(ArgumentError) { Binary.new('01201') }
62
+ assert_raises(ArgumentError) { Binary.to_decimal('01201') }
63
63
  end
64
64
 
65
65
  def test_a_number_with_trailing_non_binary_characters_is_invalid
66
66
  skip
67
- assert_raises(ArgumentError) { Binary.new('10nope') }
67
+ assert_raises(ArgumentError) { Binary.to_decimal('10nope') }
68
68
  end
69
69
 
70
70
  def test_a_number_with_leading_non_binary_characters_is_invalid
71
71
  skip
72
- assert_raises(ArgumentError) { Binary.new('nope10') }
72
+ assert_raises(ArgumentError) { Binary.to_decimal('nope10') }
73
73
  end
74
74
 
75
75
  def test_a_number_with_internal_non_binary_characters_is_invalid
76
76
  skip
77
- assert_raises(ArgumentError) { Binary.new('10nope10') }
77
+ assert_raises(ArgumentError) { Binary.to_decimal('10nope10') }
78
78
  end
79
79
 
80
80
  def test_a_number_and_a_word_whitespace_spearated_is_invalid
81
81
  skip
82
- assert_raises(ArgumentError) { Binary.new('001 nope') }
82
+ assert_raises(ArgumentError) { Binary.to_decimal('001 nope') }
83
83
  end
84
-
85
84
  # Problems in exercism evolve over time, as we find better ways to ask
86
85
  # questions.
87
86
  # The version number refers to the version of the problem you solved,
@@ -98,9 +97,8 @@ class BinaryTest < Minitest::Test
98
97
  #
99
98
  # If you are curious, read more about constants on RubyDoc:
100
99
  # http://ruby-doc.org/docs/ruby-doc-bundle/UsersGuide/rg/constants.html
101
-
102
100
  def test_bookkeeping
103
101
  skip
104
- assert_equal 2, BookKeeping::VERSION
102
+ assert_equal 3, BookKeeping::VERSION
105
103
  end
106
104
  end
@@ -1,25 +1,25 @@
1
1
  module BookKeeping
2
- VERSION = 2
2
+ VERSION = 3
3
3
  end
4
4
 
5
5
  class Binary
6
- attr_reader :digits
6
+ def self.to_decimal binary
7
+ fail ArgumentError.new("invalid binary input #{binary}") if invalid?(binary)
7
8
 
8
- def initialize(s)
9
- fail ArgumentError.new("invalid binary input #{s}") unless valid?(s)
10
-
11
- @digits = s.chars.reverse.collect(&:to_i)
9
+ digits(binary).reduce(0, &method(:convert))
12
10
  end
13
11
 
14
- def to_decimal
15
- digits.each_with_index.inject(0) do |decimal, (digit, i)|
16
- decimal + digit * 2**i
17
- end
12
+ private
13
+
14
+ def self.invalid?(binary)
15
+ binary =~ /[^01]/
18
16
  end
19
17
 
20
- private
18
+ def self.digits(binary)
19
+ binary.chars.map(&:to_i)
20
+ end
21
21
 
22
- def valid?(s)
23
- s.chars.all? { |char| ['0', '1'].include?(char) }
22
+ def self.convert(decimal, digit)
23
+ decimal * 2 + digit
24
24
  end
25
25
  end
@@ -1 +1 @@
1
- 1
1
+ 2
@@ -1,5 +1,5 @@
1
1
  module BookKeeping
2
- VERSION = 1
2
+ VERSION = 2
3
3
  end
4
4
 
5
5
  class Isogram
@@ -4,68 +4,55 @@ gem 'minitest', '>= 5.0.0'
4
4
  require 'minitest/autorun'
5
5
  require_relative 'isogram'
6
6
 
7
- # Common test data version: c1cb73f
7
+ # Common test data version: c59c2c4
8
8
  class IsogramTest < Minitest::Test
9
- def test_duplicates
9
+ def test_empty_string
10
10
  # skip
11
- string = 'duplicates'
11
+ string = ''
12
12
  assert Isogram.is_isogram?(string)
13
13
  end
14
14
 
15
- def test_eleven
15
+ def test_isogram_with_only_lower_case_characters
16
+ skip
17
+ string = 'isogram'
18
+ assert Isogram.is_isogram?(string)
19
+ end
20
+
21
+ def test_word_with_one_duplicated_character
16
22
  skip
17
23
  string = 'eleven'
18
24
  refute Isogram.is_isogram?(string)
19
25
  end
20
26
 
21
- def test_subdermatoglyphic
27
+ def test_longest_reported_english_isogram
22
28
  skip
23
29
  string = 'subdermatoglyphic'
24
30
  assert Isogram.is_isogram?(string)
25
31
  end
26
32
 
27
- def test_alphabet
33
+ def test_word_with_duplicated_character_in_mixed_case
28
34
  skip
29
35
  string = 'Alphabet'
30
36
  refute Isogram.is_isogram?(string)
31
37
  end
32
38
 
33
- def test_thumbscrew_japingly
39
+ def test_hypothetical_isogrammic_word_with_hyphen
34
40
  skip
35
41
  string = 'thumbscrew-japingly'
36
42
  assert Isogram.is_isogram?(string)
37
43
  end
38
44
 
39
- def test_hjelmqvist_gryb_zock_pfund_wax
45
+ def test_isogram_with_duplicated_non_letter_character
40
46
  skip
41
47
  string = 'Hjelmqvist-Gryb-Zock-Pfund-Wax'
42
48
  assert Isogram.is_isogram?(string)
43
49
  end
44
50
 
45
- def test_heizölrückstoßabdämpfung
46
- skip
47
- string = 'Heizölrückstoßabdämpfung'
48
- assert Isogram.is_isogram?(string)
49
- end
50
-
51
- def test_the_quick_brown_fox
52
- skip
53
- string = 'the quick brown fox'
54
- refute Isogram.is_isogram?(string)
55
- end
56
-
57
- def test_emily_jung_schwartzkopf
51
+ def test_made_up_name_that_is_an_isogram
58
52
  skip
59
53
  string = 'Emily Jung Schwartzkopf'
60
54
  assert Isogram.is_isogram?(string)
61
55
  end
62
-
63
- def test_éléphant
64
- skip
65
- string = 'éléphant'
66
- refute Isogram.is_isogram?(string)
67
- end
68
-
69
56
  # Problems in exercism evolve over time, as we find better ways to ask
70
57
  # questions.
71
58
  # The version number refers to the version of the problem you solved,
@@ -82,9 +69,8 @@ class IsogramTest < Minitest::Test
82
69
  #
83
70
  # If you are curious, read more about constants on RubyDoc:
84
71
  # http://ruby-doc.org/docs/ruby-doc-bundle/UsersGuide/rg/constants.html
85
-
86
72
  def test_bookkeeping
87
73
  skip
88
- assert_equal 1, BookKeeping::VERSION
74
+ assert_equal 2, BookKeeping::VERSION
89
75
  end
90
76
  end
@@ -4,8 +4,7 @@ class BinaryCase < OpenStruct
4
4
  end
5
5
 
6
6
  def assertion
7
- return error_assertion if raises_error?
8
- equality_assertion
7
+ raises_error? ? error_assertion : equality_assertion
9
8
  end
10
9
 
11
10
  def skipped
@@ -23,7 +22,7 @@ class BinaryCase < OpenStruct
23
22
  end
24
23
 
25
24
  def work_load
26
- "Binary.new('#{binary}')#{'.to_decimal' unless raises_error?}"
25
+ "Binary.to_decimal('#{binary}')"
27
26
  end
28
27
 
29
28
  def raises_error?
@@ -1,11 +1,7 @@
1
1
  class IsogramCase < OpenStruct
2
2
 
3
3
  def name
4
- format('test_%s', description)
5
- end
6
-
7
- def description
8
- input.downcase.gsub(/[ -]/,'_')
4
+ format('test_%s', description.downcase.gsub(/[ -]/,'_'))
9
5
  end
10
6
 
11
7
  def assertion
@@ -0,0 +1,9 @@
1
+ ## Hints
2
+ For simplicity and readability: Consider using the Scala collection functions instead of Java's `String` methods. Remember that in Scala a `String` is implicitly also a `Seq[Char]`, so you can call them as easily as the `String` methods.
3
+
4
+ Some examples:
5
+ - `filter` instead of `replaceAll`
6
+ - `take`, `takeRight`, `drop`, `head`, `tail` instead of `substring`
7
+
8
+ Another idea worth exploring might be to change the `String` into a `List[Char]`
9
+ and then use [pattern matching](http://alvinalexander.com/scala/how-to-use-lists-nil-cons-scala-match-case-expressions) with the `::` operator.
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.3.2
4
+ version: 2.0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Katrina Owen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-12-03 00:00:00.000000000 Z
11
+ date: 2016-12-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyzip
@@ -663,6 +663,13 @@ files:
663
663
  - tracks/c/exercises/rna-transcription/test/vendor/unity.c
664
664
  - tracks/c/exercises/rna-transcription/test/vendor/unity.h
665
665
  - tracks/c/exercises/rna-transcription/test/vendor/unity_internals.h
666
+ - tracks/c/exercises/robot-simulator/makefile
667
+ - tracks/c/exercises/robot-simulator/src/example.c
668
+ - tracks/c/exercises/robot-simulator/src/robot_simulator.h
669
+ - tracks/c/exercises/robot-simulator/test/test_robot_simulator.c
670
+ - tracks/c/exercises/robot-simulator/test/vendor/unity.c
671
+ - tracks/c/exercises/robot-simulator/test/vendor/unity.h
672
+ - tracks/c/exercises/robot-simulator/test/vendor/unity_internals.h
666
673
  - tracks/c/exercises/roman-numerals/makefile
667
674
  - tracks/c/exercises/roman-numerals/src/example.c
668
675
  - tracks/c/exercises/roman-numerals/src/example.h
@@ -2862,6 +2869,8 @@ files:
2862
2869
  - tracks/groovy/exercises/leap/LeapTest.groovy
2863
2870
  - tracks/groovy/exercises/nth-prime/Example.groovy
2864
2871
  - tracks/groovy/exercises/nth-prime/NthPrimeTest.groovy
2872
+ - tracks/groovy/exercises/phone-number/Example.groovy
2873
+ - tracks/groovy/exercises/phone-number/PhoneNumberSpec.groovy
2865
2874
  - tracks/groovy/exercises/raindrops/Example.groovy
2866
2875
  - tracks/groovy/exercises/raindrops/RaindropsSpec.groovy
2867
2876
  - tracks/groovy/exercises/rna-transcription/ComplementSpec.groovy
@@ -3457,6 +3466,10 @@ files:
3457
3466
  - tracks/java/exercises/acronym/src/example/java/Acronym.java
3458
3467
  - tracks/java/exercises/acronym/src/main/java/.keep
3459
3468
  - tracks/java/exercises/acronym/src/test/java/AcronymTest.java
3469
+ - tracks/java/exercises/all-your-base/build.gradle
3470
+ - tracks/java/exercises/all-your-base/src/example/java/BaseConverter.java
3471
+ - tracks/java/exercises/all-your-base/src/main/java/BaseConverter.java
3472
+ - tracks/java/exercises/all-your-base/src/test/java/BaseConverterTest.java
3460
3473
  - tracks/java/exercises/allergies/build.gradle
3461
3474
  - tracks/java/exercises/allergies/src/example/java/Allergen.java
3462
3475
  - tracks/java/exercises/allergies/src/example/java/Allergies.java
@@ -3480,6 +3493,12 @@ files:
3480
3493
  - tracks/java/exercises/binary-search-tree/src/main/java/.keep
3481
3494
  - tracks/java/exercises/binary-search-tree/src/test/java/.keep
3482
3495
  - tracks/java/exercises/binary-search-tree/src/test/java/BSTTest.java
3496
+ - tracks/java/exercises/binary-search/build.gradle
3497
+ - tracks/java/exercises/binary-search/src/example/java/BinarySearch.java
3498
+ - tracks/java/exercises/binary-search/src/main/java/.keep
3499
+ - tracks/java/exercises/binary-search/src/main/java/BinarySearch.java
3500
+ - tracks/java/exercises/binary-search/src/test/java/.keep
3501
+ - tracks/java/exercises/binary-search/src/test/java/BinarySearchTest.java
3483
3502
  - tracks/java/exercises/binary/build.gradle
3484
3503
  - tracks/java/exercises/binary/src/example/java/Binary.java
3485
3504
  - tracks/java/exercises/binary/src/main/java/.keep
@@ -4514,8 +4533,12 @@ files:
4514
4533
  - tracks/lua/exercises/roman-numerals/roman-numerals_spec.lua
4515
4534
  - tracks/lua/exercises/run-length-encoding/example.lua
4516
4535
  - tracks/lua/exercises/run-length-encoding/run-length-encoding_spec.lua
4536
+ - tracks/lua/exercises/say/example.lua
4537
+ - tracks/lua/exercises/say/say_spec.lua
4517
4538
  - tracks/lua/exercises/scrabble-score/example.lua
4518
4539
  - tracks/lua/exercises/scrabble-score/scrabble-score_spec.lua
4540
+ - tracks/lua/exercises/secret-handshake/example.lua
4541
+ - tracks/lua/exercises/secret-handshake/secret-handshake_spec.lua
4519
4542
  - tracks/lua/exercises/series/example.lua
4520
4543
  - tracks/lua/exercises/series/series_spec.lua
4521
4544
  - tracks/lua/exercises/sieve/example.lua
@@ -4770,6 +4793,11 @@ files:
4770
4793
  - tracks/ocaml/exercises/bowling/bowling.mli
4771
4794
  - tracks/ocaml/exercises/bowling/example.ml
4772
4795
  - tracks/ocaml/exercises/bowling/test.ml
4796
+ - tracks/ocaml/exercises/bracket-push/.merlin
4797
+ - tracks/ocaml/exercises/bracket-push/Makefile
4798
+ - tracks/ocaml/exercises/bracket-push/bracket_push.mli
4799
+ - tracks/ocaml/exercises/bracket-push/example.ml
4800
+ - tracks/ocaml/exercises/bracket-push/test.ml
4773
4801
  - tracks/ocaml/exercises/custom-set/Makefile
4774
4802
  - tracks/ocaml/exercises/custom-set/example.ml
4775
4803
  - tracks/ocaml/exercises/custom-set/test.ml
@@ -4898,21 +4926,23 @@ files:
4898
4926
  - tracks/ocaml/tools/test-generator/Makefile
4899
4927
  - tracks/ocaml/tools/test-generator/_tags
4900
4928
  - tracks/ocaml/tools/test-generator/interfaces/codegen.mli
4929
+ - tracks/ocaml/tools/test-generator/interfaces/controller.mli
4901
4930
  - tracks/ocaml/tools/test-generator/interfaces/parser.mli
4902
4931
  - tracks/ocaml/tools/test-generator/interfaces/special_cases.mli
4903
4932
  - tracks/ocaml/tools/test-generator/interfaces/template.mli
4904
- - tracks/ocaml/tools/test-generator/interfaces/test_generator.mli
4905
4933
  - tracks/ocaml/tools/test-generator/interfaces/utils.mli
4906
4934
  - tracks/ocaml/tools/test-generator/src/codegen.ml
4935
+ - tracks/ocaml/tools/test-generator/src/controller.ml
4907
4936
  - tracks/ocaml/tools/test-generator/src/model.ml
4908
4937
  - tracks/ocaml/tools/test-generator/src/parser.ml
4909
4938
  - tracks/ocaml/tools/test-generator/src/special_cases.ml
4910
4939
  - tracks/ocaml/tools/test-generator/src/template.ml
4911
4940
  - tracks/ocaml/tools/test-generator/src/test_gen.ml
4912
- - tracks/ocaml/tools/test-generator/src/test_generator.ml
4913
4941
  - tracks/ocaml/tools/test-generator/src/utils.ml
4914
4942
  - tracks/ocaml/tools/test-generator/templates/anagram/template.ml
4915
4943
  - tracks/ocaml/tools/test-generator/templates/bob/template.ml
4944
+ - tracks/ocaml/tools/test-generator/templates/bracket-push/template.ml
4945
+ - tracks/ocaml/tools/test-generator/templates/difference-of-squares/template.ml
4916
4946
  - tracks/ocaml/tools/test-generator/templates/hamming/template.ml
4917
4947
  - tracks/ocaml/tools/test-generator/templates/hello-world/template.ml
4918
4948
  - tracks/ocaml/tools/test-generator/templates/leap/template.ml
@@ -4921,9 +4951,12 @@ files:
4921
4951
  - tracks/ocaml/tools/test-generator/templates/word-count/template.ml
4922
4952
  - tracks/ocaml/tools/test-generator/test/all_tests.ml
4923
4953
  - tracks/ocaml/tools/test-generator/test/codegen_test.ml
4954
+ - tracks/ocaml/tools/test-generator/test/difference_of_squares.json
4955
+ - tracks/ocaml/tools/test-generator/test/hello_world.json
4924
4956
  - tracks/ocaml/tools/test-generator/test/leap.json
4925
4957
  - tracks/ocaml/tools/test-generator/test/model_test.ml
4926
4958
  - tracks/ocaml/tools/test-generator/test/parser_test.ml
4959
+ - tracks/ocaml/tools/test-generator/test/sample-suite-template.txt
4927
4960
  - tracks/ocaml/tools/test-generator/test/sample_template.txt
4928
4961
  - tracks/ocaml/tools/test-generator/test/special_cases_test.ml
4929
4962
  - tracks/ocaml/tools/test-generator/test/template_test.ml
@@ -5549,6 +5582,7 @@ files:
5549
5582
  - tracks/r/README.md
5550
5583
  - tracks/r/bin/fetch-configlet
5551
5584
  - tracks/r/config.json
5585
+ - tracks/r/docs/ABOUT.md
5552
5586
  - tracks/r/docs/INSTALLATION.md
5553
5587
  - tracks/r/docs/LEARNING.md
5554
5588
  - tracks/r/docs/RESOURCES.md
@@ -5560,6 +5594,12 @@ files:
5560
5594
  - tracks/r/exercises/bob/bob.R
5561
5595
  - tracks/r/exercises/bob/example.R
5562
5596
  - tracks/r/exercises/bob/test_bob.R
5597
+ - tracks/r/exercises/difference-of-squares/difference-of-squares.R
5598
+ - tracks/r/exercises/difference-of-squares/example.R
5599
+ - tracks/r/exercises/difference-of-squares/test_difference-of-squares.R
5600
+ - tracks/r/exercises/hamming/example.R
5601
+ - tracks/r/exercises/hamming/hamming.R
5602
+ - tracks/r/exercises/hamming/test_hamming.R
5563
5603
  - tracks/r/exercises/hello-world/example.R
5564
5604
  - tracks/r/exercises/hello-world/hello-world.R
5565
5605
  - tracks/r/exercises/hello-world/test_hello-world.R
@@ -6379,6 +6419,7 @@ files:
6379
6419
  - tracks/scala/exercises/pascals-triangle/example.scala
6380
6420
  - tracks/scala/exercises/pascals-triangle/src/main/scala/.keep
6381
6421
  - tracks/scala/exercises/pascals-triangle/src/test/scala/PascalsTriangleTest.scala
6422
+ - tracks/scala/exercises/phone-number/HINTS.md
6382
6423
  - tracks/scala/exercises/phone-number/build.sbt
6383
6424
  - tracks/scala/exercises/phone-number/example.scala
6384
6425
  - tracks/scala/exercises/phone-number/src/main/scala/.keep