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
@@ -0,0 +1,17 @@
1
+ apply plugin: "java"
2
+ apply plugin: "eclipse"
3
+ apply plugin: "idea"
4
+
5
+ repositories {
6
+ mavenCentral()
7
+ }
8
+
9
+ dependencies {
10
+ testCompile "junit:junit:4.12"
11
+ }
12
+ test {
13
+ testLogging {
14
+ exceptionFormat = 'full'
15
+ events = ["passed", "failed", "skipped"]
16
+ }
17
+ }
@@ -0,0 +1,40 @@
1
+
2
+ import java.util.List;
3
+
4
+ public class BinarySearch<T extends Comparable<T>> {
5
+
6
+ private List<T> array;
7
+ private int arraySize;
8
+
9
+ public BinarySearch(List<T> array) {
10
+ this.array = array;
11
+ this.arraySize = array.size();
12
+ }
13
+
14
+ public int indexOf(T value) {
15
+ return search(value);
16
+ }
17
+
18
+ public List<T> getArray() {
19
+ return array;
20
+ }
21
+
22
+ private int search(T value) {
23
+ int left = 0;
24
+ int right = this.arraySize - 1;
25
+ int middle;
26
+ T element;
27
+ while (left <= right) {
28
+ middle = (int) Math.floor(0.5 * (left + right));
29
+ element = this.array.get(middle);
30
+ if (value.compareTo(element) > 0) {
31
+ left = middle + 1;
32
+ } else if (value.compareTo(element) < 0) {
33
+ right = middle - 1;
34
+ } else {
35
+ return middle;
36
+ }
37
+ }
38
+ return -1;
39
+ }
40
+ }
@@ -0,0 +1,4 @@
1
+
2
+ public class BinarySearch {
3
+
4
+ }
@@ -0,0 +1,136 @@
1
+
2
+ import java.util.ArrayList;
3
+ import java.util.Arrays;
4
+ import java.util.Collections;
5
+ import java.util.List;
6
+ import static org.junit.Assert.assertEquals;
7
+ import org.junit.Ignore;
8
+ import org.junit.Test;
9
+
10
+ public class BinarySearchTest {
11
+
12
+ public static final List<Integer> EMPTY_LIST
13
+ = Collections.unmodifiableList(new ArrayList<Integer>(0));
14
+
15
+ public static final List<Integer> LIST_OF_UNIT_LENGTH
16
+ = Collections.unmodifiableList(
17
+ Arrays.asList(6)
18
+ );
19
+
20
+ private static final List<Integer> SORTED_LIST
21
+ = Collections.unmodifiableList(
22
+ Arrays.asList(1, 3, 4, 6, 8, 9, 11)
23
+ );
24
+
25
+ public static final List<Integer> SORTED_LIST_OF_ODD_LENGTH
26
+ = Collections.unmodifiableList(
27
+ Arrays.asList(1, 3, 5, 8, 13, 21, 34, 55,
28
+ 89, 144, 233, 377, 634)
29
+ );
30
+
31
+ public static final List<Integer> SORTED_LIST_OF_EVEN_LENGTH
32
+ = Collections.unmodifiableList(
33
+ Arrays.asList(1, 3, 5, 8, 13, 21, 34, 55,
34
+ 89, 144, 233, 377)
35
+ );
36
+
37
+ @Test
38
+ public void findsAValueInAnArrayWithOneElement() {
39
+ BinarySearch<Integer> sut = new BinarySearch<>(LIST_OF_UNIT_LENGTH);
40
+ final int value = 6;
41
+ final int actual = sut.indexOf(value);
42
+ final int expected = 0;
43
+ assertEquals(expected, actual);
44
+ }
45
+
46
+ @Ignore
47
+ @Test
48
+ public void findsAValueInTheMiddleOfAnArray() {
49
+ BinarySearch<Integer> sut = new BinarySearch<>(SORTED_LIST);
50
+ final int value = 6;
51
+ final int actual = sut.indexOf(value);
52
+ final int expected = 3;
53
+ assertEquals(expected, actual);
54
+ }
55
+
56
+ @Ignore
57
+ @Test
58
+ public void findsAValueAtTheBeginningOfAnArray() {
59
+ BinarySearch<Integer> sut = new BinarySearch<>(SORTED_LIST);
60
+ final int value = 1;
61
+ final int actual = sut.indexOf(value);
62
+ final int expected = 0;
63
+ assertEquals(expected, actual);
64
+ }
65
+
66
+ @Ignore
67
+ @Test
68
+ public void findsAValueAtTheEndOfAnArray() {
69
+ BinarySearch<Integer> sut = new BinarySearch<>(SORTED_LIST);
70
+ final int value = 11;
71
+ final int actual = sut.indexOf(value);
72
+ final int expected = 6;
73
+ assertEquals(expected, actual);
74
+ }
75
+
76
+ @Ignore
77
+ @Test
78
+ public void findsAValueInAnArrayOfOddLength() {
79
+ BinarySearch<Integer> sut = new BinarySearch<>(SORTED_LIST_OF_ODD_LENGTH);
80
+ final int value = 144;
81
+ final int actual = sut.indexOf(value);
82
+ final int expected = 9;
83
+ assertEquals(expected, actual);
84
+ }
85
+
86
+ @Ignore
87
+ @Test
88
+ public void findsAValueInAnArrayOfEvenLength() {
89
+ BinarySearch<Integer> sut
90
+ = new BinarySearch<>(SORTED_LIST_OF_EVEN_LENGTH);
91
+ final int value = 21;
92
+ final int actual = sut.indexOf(value);
93
+ final int expected = 5;
94
+ assertEquals(expected, actual);
95
+ }
96
+
97
+ @Ignore
98
+ @Test
99
+ public void identifiesThatAValueIsNotIncludedInTheArray() {
100
+ BinarySearch<Integer> sut = new BinarySearch<>(SORTED_LIST);
101
+ final int value = 7;
102
+ final int actual = sut.indexOf(value);
103
+ final int expected = -1;
104
+ assertEquals(expected, actual);
105
+ }
106
+
107
+ @Ignore
108
+ @Test
109
+ public void aValueSmallerThanTheArraysSmallestValueIsNotIncluded() {
110
+ BinarySearch<Integer> sut = new BinarySearch<>(SORTED_LIST);
111
+ final int value = 0;
112
+ final int actual = sut.indexOf(value);
113
+ final int expected = -1;
114
+ assertEquals(expected, actual);
115
+ }
116
+
117
+ @Ignore
118
+ @Test
119
+ public void aValueLargerThanTheArraysSmallestValueIsNotIncluded() {
120
+ BinarySearch<Integer> sut = new BinarySearch<>(SORTED_LIST);
121
+ final int value = 13;
122
+ final int actual = sut.indexOf(value);
123
+ final int expected = -1;
124
+ assertEquals(expected, actual);
125
+ }
126
+
127
+ @Ignore
128
+ @Test
129
+ public void nothingIsIncludedInAnEmptyArray() {
130
+ BinarySearch<Integer> sut = new BinarySearch<>(EMPTY_LIST);
131
+ final int value = 1;
132
+ final int actual = sut.indexOf(value);
133
+ final int expected = -1;
134
+ assertEquals(expected, actual);
135
+ }
136
+ }
@@ -1,5 +1,6 @@
1
1
  include 'accumulate'
2
2
  include 'acronym'
3
+ include 'all-your-base'
3
4
  include 'allergies'
4
5
  include 'anagram'
5
6
  include 'atbash-cipher'
@@ -558,6 +558,14 @@
558
558
  "control-flow (if-else statements)",
559
559
  "control-flow (loops)"
560
560
  ]
561
+ }, {
562
+ "slug": "say",
563
+ "difficulty": 7,
564
+ "topics": [
565
+ "strings",
566
+ "text formatting",
567
+ "control-flow (loops)"
568
+ ]
561
569
  }, {
562
570
  "slug": "pov",
563
571
  "difficulty": 9,
@@ -575,6 +583,14 @@
575
583
  "control-flow (if-else statements)",
576
584
  "control-flow (loops)"
577
585
  ]
586
+ }, {
587
+ "slug": "secret-handshake",
588
+ "difficulty": 3,
589
+ "topics": [
590
+ "control-flow (if-else statements)",
591
+ "arrays",
592
+ "bitwise operations"
593
+ ]
578
594
  }],
579
595
  "deprecated": [
580
596
 
@@ -0,0 +1,92 @@
1
+ local ones = {
2
+ [1] = 'one',
3
+ [2] = 'two',
4
+ [3] = 'three',
5
+ [4] = 'four',
6
+ [5] = 'five',
7
+ [6] = 'six',
8
+ [7] = 'seven',
9
+ [8] = 'eight',
10
+ [9] = 'nine'
11
+ }
12
+
13
+ local teens = {
14
+ [10] = 'ten',
15
+ [11] = 'eleven',
16
+ [12] = 'twelve',
17
+ [13] = 'thirteen',
18
+ [14] = 'fourteen',
19
+ [15] = 'fifteen',
20
+ [16] = 'sixteen',
21
+ [17] = 'seventeen',
22
+ [18] = 'eighteen',
23
+ [19] = 'nineteen',
24
+ }
25
+
26
+ local tens = {
27
+ [2] = 'twenty',
28
+ [3] = 'thirty',
29
+ [4] = 'forty',
30
+ [5] = 'fifty',
31
+ [6] = 'sixty',
32
+ [7] = 'seventy',
33
+ [8] = 'eighty',
34
+ [9] = 'ninety'
35
+ }
36
+
37
+ local group_name = {
38
+ 'thousand',
39
+ 'million',
40
+ 'billion'
41
+ }
42
+
43
+ local function say_group(n)
44
+ local said = ''
45
+
46
+ if n // 100 > 0 then
47
+ said = said .. ones[n // 100] .. ' hundred'
48
+ n = n - (n // 100) * 100
49
+ if n > 0 then said = said .. ' ' end
50
+ end
51
+
52
+ if tens[n // 10] then
53
+ said = said .. tens[n // 10]
54
+ n = n - (n // 10) * 10
55
+ if n > 0 then said = said .. '-' end
56
+ end
57
+
58
+ if teens[n] then
59
+ said = said .. teens[n]
60
+ elseif ones[n] then
61
+ said = said .. ones[n]
62
+ end
63
+
64
+ return said
65
+ end
66
+
67
+ return function(n)
68
+ if n < 0 or n > 999999999999 then return -1 end
69
+
70
+ local blahs = {}
71
+ local group_index = 0
72
+
73
+ while n > 0 do
74
+ local group = say_group(n % 1000)
75
+
76
+ if group ~= '' then
77
+ if group_name[group_index] then
78
+ group = group .. ' ' .. group_name[group_index]
79
+ end
80
+ table.insert(blahs, 1, group)
81
+ end
82
+
83
+ n = n // 1000
84
+ group_index = group_index + 1
85
+ end
86
+
87
+ if #blahs == 0 then
88
+ return 'zero'
89
+ else
90
+ return table.concat(blahs, ' ')
91
+ end
92
+ end
@@ -0,0 +1,105 @@
1
+ -- Workaround for the fact busted has a built-in called 'say'
2
+ local say = loadfile 'say.lua'()
3
+
4
+ describe('say', function()
5
+ it('should say 0', function()
6
+ assert.are.equal('zero', say(0))
7
+ end)
8
+
9
+ it('should say 1', function()
10
+ assert.are.equal('one', say(1))
11
+ end)
12
+
13
+ it('should say 14', function()
14
+ assert.are.equal('fourteen', say(14))
15
+ end)
16
+
17
+ it('should say 20', function()
18
+ assert.are.equal('twenty', say(20))
19
+ end)
20
+
21
+ it('should say 22', function()
22
+ assert.are.equal('twenty-two', say(22))
23
+ end)
24
+
25
+ it('should say 100', function()
26
+ assert.are.equal('one hundred', say(100))
27
+ end)
28
+
29
+ it('should say 123', function()
30
+ assert.are.equal('one hundred twenty-three', say(123))
31
+ end)
32
+
33
+ it('should say 1,000', function()
34
+ assert.are.equal('one thousand', say(1000))
35
+ end)
36
+
37
+ it('should say 1,234', function()
38
+ assert.are.equal('one thousand two hundred thirty-four', say(1234))
39
+ end)
40
+
41
+ it('should say 1,000,000', function()
42
+ assert.are.equal('one million', say(1000000))
43
+ end)
44
+
45
+ it('should say 1,002,345', function()
46
+ assert.are.equal('one million two thousand three hundred forty-five', say(1002345))
47
+ end)
48
+
49
+ it('should say 1,000,000,000', function()
50
+ assert.are.equal('one billion', say(1000000000))
51
+ end)
52
+
53
+ it('should say very large numbers', function()
54
+ assert.are.equal(
55
+ 'nine hundred eighty-seven billion six hundred fifty-four million three hundred twenty-one thousand one hundred twenty-three',
56
+ say(987654321123)
57
+ )
58
+ end)
59
+
60
+ it('should say all ones', function()
61
+ assert.are.equal('one', say(1))
62
+ assert.are.equal('two', say(2))
63
+ assert.are.equal('three', say(3))
64
+ assert.are.equal('four', say(4))
65
+ assert.are.equal('five', say(5))
66
+ assert.are.equal('six', say(6))
67
+ assert.are.equal('seven', say(7))
68
+ assert.are.equal('eight', say(8))
69
+ assert.are.equal('nine', say(9))
70
+ end)
71
+
72
+ it('should say all teens', function()
73
+ assert.are.equal('ten', say(10))
74
+ assert.are.equal('eleven', say(11))
75
+ assert.are.equal('twelve', say(12))
76
+ assert.are.equal('thirteen', say(13))
77
+ assert.are.equal('fourteen', say(14))
78
+ assert.are.equal('fifteen', say(15))
79
+ assert.are.equal('sixteen', say(16))
80
+ assert.are.equal('seventeen', say(17))
81
+ assert.are.equal('eighteen', say(18))
82
+ assert.are.equal('nineteen', say(19))
83
+ end)
84
+
85
+ it('should say all tens', function()
86
+ assert.are.equal('twenty', say(20))
87
+ assert.are.equal('thirty', say(30))
88
+ assert.are.equal('forty', say(40))
89
+ assert.are.equal('fifty', say(50))
90
+ assert.are.equal('sixty', say(60))
91
+ assert.are.equal('seventy', say(70))
92
+ assert.are.equal('eighty', say(80))
93
+ assert.are.equal('ninety', say(90))
94
+ end)
95
+
96
+ it('should not say negative numbers', function()
97
+ assert.are.equal(-1, say(-1))
98
+ assert.are.equal(-1, say(-5))
99
+ end)
100
+
101
+ it('should not say numbers above 999,999,999,999', function()
102
+ assert.are.equal(-1, say(1000000000000))
103
+ assert.are.equal(-1, say(1000000000005))
104
+ end)
105
+ end)
@@ -0,0 +1,17 @@
1
+ local function reverse(t)
2
+ local reversed = {}
3
+ for i = #t, 1, -1 do
4
+ table.insert(reversed, t[i])
5
+ end
6
+ return reversed
7
+ end
8
+
9
+ return function(n)
10
+ local handshake = {}
11
+ if n & 1 > 0 then table.insert(handshake, 'wink') end
12
+ if n & 2 > 0 then table.insert(handshake, 'double blink') end
13
+ if n & 4 > 0 then table.insert(handshake, 'close your eyes') end
14
+ if n & 8 > 0 then table.insert(handshake, 'jump') end
15
+ if n & 16 > 0 then handshake = reverse(handshake) end
16
+ return handshake
17
+ end