trackler 2.1.0.21 → 2.1.0.22

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.
Files changed (196) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/tracks/delphi/exercises/allergies/uAllergiesExample.pas +10 -3
  4. data/tracks/ocaml/.travis-ci.sh +3 -1
  5. data/tracks/ocaml/exercises/acronym/Makefile +1 -1
  6. data/tracks/ocaml/exercises/acronym/example.ml +1 -1
  7. data/tracks/ocaml/exercises/acronym/test.ml +2 -4
  8. data/tracks/ocaml/exercises/all-your-base/example.ml +1 -1
  9. data/tracks/ocaml/exercises/all-your-base/test.ml +1 -1
  10. data/tracks/ocaml/exercises/anagram/example.ml +1 -1
  11. data/tracks/ocaml/exercises/anagram/test.ml +1 -1
  12. data/tracks/ocaml/exercises/atbash-cipher/example.ml +1 -1
  13. data/tracks/ocaml/exercises/atbash-cipher/test.ml +1 -1
  14. data/tracks/ocaml/exercises/beer-song/example.ml +1 -1
  15. data/tracks/ocaml/exercises/beer-song/test.ml +1 -1
  16. data/tracks/ocaml/exercises/binary-search/Makefile +1 -1
  17. data/tracks/ocaml/exercises/binary-search/example.ml +5 -5
  18. data/tracks/ocaml/exercises/binary-search/test.ml +1 -1
  19. data/tracks/ocaml/exercises/bob/example.ml +1 -1
  20. data/tracks/ocaml/exercises/bob/test.ml +1 -1
  21. data/tracks/ocaml/exercises/bowling/bowling.mli +1 -1
  22. data/tracks/ocaml/exercises/bowling/example.ml +1 -1
  23. data/tracks/ocaml/exercises/bowling/test.ml +1 -1
  24. data/tracks/ocaml/exercises/bracket-push/example.ml +1 -1
  25. data/tracks/ocaml/exercises/bracket-push/test.ml +1 -1
  26. data/tracks/ocaml/exercises/change/example.ml +1 -1
  27. data/tracks/ocaml/exercises/change/test.ml +1 -1
  28. data/tracks/ocaml/exercises/connect/example.ml +1 -1
  29. data/tracks/ocaml/exercises/connect/test.ml +1 -1
  30. data/tracks/ocaml/exercises/difference-of-squares/example.ml +1 -1
  31. data/tracks/ocaml/exercises/difference-of-squares/test.ml +1 -1
  32. data/tracks/ocaml/exercises/dominoes/example.ml +1 -1
  33. data/tracks/ocaml/exercises/dominoes/test.ml +1 -1
  34. data/tracks/ocaml/exercises/etl/example.ml +1 -1
  35. data/tracks/ocaml/exercises/etl/test.ml +1 -1
  36. data/tracks/ocaml/exercises/grade-school/example.ml +1 -1
  37. data/tracks/ocaml/exercises/grade-school/grade_school.mli +1 -1
  38. data/tracks/ocaml/exercises/grade-school/test.ml +1 -1
  39. data/tracks/ocaml/exercises/hamming/example.ml +1 -1
  40. data/tracks/ocaml/exercises/hamming/test.ml +1 -1
  41. data/tracks/ocaml/exercises/hangman/example.ml +1 -1
  42. data/tracks/ocaml/exercises/hello-world/test.ml +1 -1
  43. data/tracks/ocaml/exercises/hexadecimal/example.ml +1 -1
  44. data/tracks/ocaml/exercises/hexadecimal/test.ml +1 -1
  45. data/tracks/ocaml/exercises/leap/test.ml +1 -1
  46. data/tracks/ocaml/exercises/list-ops/test.ml +1 -1
  47. data/tracks/ocaml/exercises/luhn/example.ml +1 -1
  48. data/tracks/ocaml/exercises/luhn/test.ml +1 -1
  49. data/tracks/ocaml/exercises/meetup/example.ml +1 -1
  50. data/tracks/ocaml/exercises/meetup/test.ml +1 -1
  51. data/tracks/ocaml/exercises/minesweeper/example.ml +1 -1
  52. data/tracks/ocaml/exercises/minesweeper/test.ml +1 -1
  53. data/tracks/ocaml/exercises/nucleotide-count/example.ml +1 -1
  54. data/tracks/ocaml/exercises/nucleotide-count/nucleotide_count.mli +1 -1
  55. data/tracks/ocaml/exercises/nucleotide-count/test.ml +1 -1
  56. data/tracks/ocaml/exercises/pangram/example.ml +1 -1
  57. data/tracks/ocaml/exercises/pangram/test.ml +1 -1
  58. data/tracks/ocaml/exercises/phone-number/example.ml +1 -1
  59. data/tracks/ocaml/exercises/phone-number/test.ml +1 -1
  60. data/tracks/ocaml/exercises/prime-factors/example.ml +1 -1
  61. data/tracks/ocaml/exercises/prime-factors/test.ml +1 -1
  62. data/tracks/ocaml/exercises/raindrops/example.ml +1 -1
  63. data/tracks/ocaml/exercises/raindrops/test.ml +1 -1
  64. data/tracks/ocaml/exercises/rna-transcription/example.ml +1 -1
  65. data/tracks/ocaml/exercises/rna-transcription/test.ml +1 -1
  66. data/tracks/ocaml/exercises/robot-name/example.ml +1 -1
  67. data/tracks/ocaml/exercises/robot-name/test.ml +1 -1
  68. data/tracks/ocaml/exercises/roman-numerals/test.ml +1 -1
  69. data/tracks/ocaml/exercises/run-length-encoding/example.ml +1 -1
  70. data/tracks/ocaml/exercises/run-length-encoding/test.ml +1 -1
  71. data/tracks/ocaml/exercises/say/example.ml +1 -1
  72. data/tracks/ocaml/exercises/say/test.ml +1 -1
  73. data/tracks/ocaml/exercises/space-age/example.ml +1 -1
  74. data/tracks/ocaml/exercises/space-age/test.ml +1 -1
  75. data/tracks/ocaml/exercises/triangle/example.ml +1 -1
  76. data/tracks/ocaml/exercises/triangle/test.ml +1 -1
  77. data/tracks/ocaml/exercises/word-count/example.ml +1 -1
  78. data/tracks/ocaml/exercises/word-count/test.ml +1 -1
  79. data/tracks/ocaml/exercises/word-count/word_count.mli +1 -3
  80. data/tracks/ocaml/exercises/zipper/example.ml +1 -1
  81. data/tracks/ocaml/exercises/zipper/test.ml +1 -1
  82. data/tracks/ocaml/exercises/zipper/tree.ml +1 -1
  83. data/tracks/ocaml/exercises/zipper/tree.mli +1 -1
  84. data/tracks/ocaml/exercises/zipper/zipper.mli +1 -1
  85. data/tracks/ocaml/tools/test-generator/src/canonical_data_checker.ml +1 -1
  86. data/tracks/ocaml/tools/test-generator/src/codegen.ml +1 -1
  87. data/tracks/ocaml/tools/test-generator/src/controller.ml +1 -1
  88. data/tracks/ocaml/tools/test-generator/src/debug.ml +1 -1
  89. data/tracks/ocaml/tools/test-generator/src/files.ml +1 -1
  90. data/tracks/ocaml/tools/test-generator/src/model.ml +1 -1
  91. data/tracks/ocaml/tools/test-generator/src/parser.ml +5 -5
  92. data/tracks/ocaml/tools/test-generator/src/special_cases.ml +1 -1
  93. data/tracks/ocaml/tools/test-generator/src/template.ml +1 -1
  94. data/tracks/ocaml/tools/test-generator/src/test_gen.ml +1 -1
  95. data/tracks/ocaml/tools/test-generator/src/utils.ml +2 -2
  96. data/tracks/ocaml/tools/test-generator/templates/acronym/template.ml +1 -1
  97. data/tracks/ocaml/tools/test-generator/templates/all-your-base/template.ml +1 -1
  98. data/tracks/ocaml/tools/test-generator/templates/anagram/template.ml +1 -1
  99. data/tracks/ocaml/tools/test-generator/templates/atbash-cipher/template.ml +1 -1
  100. data/tracks/ocaml/tools/test-generator/templates/beer-song/template.ml +1 -1
  101. data/tracks/ocaml/tools/test-generator/templates/binary-search/template.ml +1 -1
  102. data/tracks/ocaml/tools/test-generator/templates/bob/template.ml +1 -1
  103. data/tracks/ocaml/tools/test-generator/templates/bowling/template.ml +1 -1
  104. data/tracks/ocaml/tools/test-generator/templates/bracket-push/template.ml +1 -1
  105. data/tracks/ocaml/tools/test-generator/templates/change/template.ml +1 -1
  106. data/tracks/ocaml/tools/test-generator/templates/connect/template.ml +1 -1
  107. data/tracks/ocaml/tools/test-generator/templates/difference-of-squares/template.ml +1 -1
  108. data/tracks/ocaml/tools/test-generator/templates/dominoes/template.ml +1 -1
  109. data/tracks/ocaml/tools/test-generator/templates/etl/template.ml +1 -1
  110. data/tracks/ocaml/tools/test-generator/templates/hamming/template.ml +1 -1
  111. data/tracks/ocaml/tools/test-generator/templates/hello-world/template.ml +1 -1
  112. data/tracks/ocaml/tools/test-generator/templates/leap/template.ml +1 -1
  113. data/tracks/ocaml/tools/test-generator/templates/luhn/template.ml +1 -1
  114. data/tracks/ocaml/tools/test-generator/templates/minesweeper/template.ml +1 -1
  115. data/tracks/ocaml/tools/test-generator/templates/pangram/template.ml +1 -1
  116. data/tracks/ocaml/tools/test-generator/templates/phone-number/template.ml +1 -1
  117. data/tracks/ocaml/tools/test-generator/templates/prime-factors/template.ml +1 -1
  118. data/tracks/ocaml/tools/test-generator/templates/raindrops/template.ml +1 -1
  119. data/tracks/ocaml/tools/test-generator/templates/roman-numerals/template.ml +1 -1
  120. data/tracks/ocaml/tools/test-generator/templates/run-length-encoding/template.ml +1 -1
  121. data/tracks/ocaml/tools/test-generator/templates/say/template.ml +1 -1
  122. data/tracks/ocaml/tools/test-generator/templates/space-age/template.ml +1 -1
  123. data/tracks/ocaml/tools/test-generator/templates/triangle/template.ml +1 -1
  124. data/tracks/ocaml/tools/test-generator/templates/word-count/template.ml +1 -1
  125. data/tracks/ocaml/tools/test-generator/test/all_tests.ml +1 -1
  126. data/tracks/ocaml/tools/test-generator/test/codegen_test.ml +1 -1
  127. data/tracks/ocaml/tools/test-generator/test/model_test.ml +1 -1
  128. data/tracks/ocaml/tools/test-generator/test/parser_test.ml +1 -1
  129. data/tracks/ocaml/tools/test-generator/test/special_cases_test.ml +1 -1
  130. data/tracks/ocaml/tools/test-generator/test/template_test.ml +1 -1
  131. data/tracks/ocaml/tools/test-generator/test/utils_test.ml +1 -1
  132. data/tracks/r/.travis.yml +13 -2
  133. data/tracks/r/README.md +35 -16
  134. data/tracks/r/bin/run_lints.R +30 -0
  135. data/tracks/r/bin/run_tests.R +35 -0
  136. data/tracks/r/exercises/anagram/anagram.R +1 -1
  137. data/tracks/r/exercises/anagram/example.R +5 -5
  138. data/tracks/r/exercises/anagram/test_anagram.R +1 -15
  139. data/tracks/r/exercises/bob/bob.R +1 -1
  140. data/tracks/r/exercises/bob/example.R +2 -2
  141. data/tracks/r/exercises/bob/test_bob.R +1 -13
  142. data/tracks/r/exercises/difference-of-squares/example.R +5 -5
  143. data/tracks/r/exercises/difference-of-squares/test_difference-of-squares.R +2 -0
  144. data/tracks/r/exercises/grains/example.R +6 -6
  145. data/tracks/r/exercises/grains/grains.R +2 -2
  146. data/tracks/r/exercises/grains/test_grains.R +1 -2
  147. data/tracks/r/exercises/hamming/example.R +3 -3
  148. data/tracks/r/exercises/hamming/hamming.R +1 -1
  149. data/tracks/r/exercises/hamming/test_hamming.R +1 -1
  150. data/tracks/r/exercises/hello-world/example.R +1 -1
  151. data/tracks/r/exercises/hello-world/test_hello-world.R +1 -1
  152. data/tracks/r/exercises/isogram/example.R +4 -4
  153. data/tracks/r/exercises/isogram/isogram.R +1 -1
  154. data/tracks/r/exercises/isogram/test_isogram.R +1 -1
  155. data/tracks/r/exercises/largest-series-product/example.R +11 -11
  156. data/tracks/r/exercises/largest-series-product/largest-series-product.R +2 -2
  157. data/tracks/r/exercises/largest-series-product/test_largest-series-product.R +16 -16
  158. data/tracks/r/exercises/leap/leap.R +1 -1
  159. data/tracks/r/exercises/leap/test_leap.R +1 -1
  160. data/tracks/r/exercises/luhn/example.R +16 -10
  161. data/tracks/r/exercises/luhn/test_luhn.R +1 -1
  162. data/tracks/r/exercises/pascals-triangle/example.R +10 -10
  163. data/tracks/r/exercises/pascals-triangle/pascals-triangle.R +2 -2
  164. data/tracks/r/exercises/pascals-triangle/test_pascals-triangle.R +8 -8
  165. data/tracks/r/exercises/perfect-numbers/example.R +3 -3
  166. data/tracks/r/exercises/perfect-numbers/perfect-numbers.R +1 -1
  167. data/tracks/r/exercises/perfect-numbers/test_perfect-numbers.R +12 -12
  168. data/tracks/r/exercises/phone-number/example.R +8 -8
  169. data/tracks/r/exercises/phone-number/phone-number.R +1 -1
  170. data/tracks/r/exercises/phone-number/test_phone-number.R +11 -11
  171. data/tracks/r/exercises/prime-factors/example.R +2 -2
  172. data/tracks/r/exercises/prime-factors/prime-factors.R +1 -1
  173. data/tracks/r/exercises/prime-factors/test_prime-factors.R +1 -1
  174. data/tracks/r/exercises/raindrops/example.R +12 -11
  175. data/tracks/r/exercises/raindrops/test_raindrops.R +3 -2
  176. data/tracks/r/exercises/rna-transcription/example.R +3 -3
  177. data/tracks/r/exercises/rna-transcription/test_rna-transcription.R +1 -1
  178. data/tracks/r/exercises/rotational-cipher/example.R +7 -7
  179. data/tracks/r/exercises/rotational-cipher/test_rotational-cipher.R +3 -2
  180. data/tracks/r/exercises/scrabble-score/example.R +5 -4
  181. data/tracks/r/exercises/scrabble-score/scrabble-score.R +1 -1
  182. data/tracks/r/exercises/scrabble-score/test_scrabble-score.R +12 -12
  183. data/tracks/r/exercises/secret-handshake/example.R +6 -6
  184. data/tracks/r/exercises/secret-handshake/test_secret-handshake.R +5 -3
  185. data/tracks/r/exercises/sieve/test_sieve.R +1 -1
  186. data/tracks/r/exercises/space-age/example.R +8 -3
  187. data/tracks/r/exercises/space-age/space-age.R +1 -1
  188. data/tracks/r/exercises/space-age/test_space-age.R +1 -1
  189. data/tracks/r/exercises/sum-of-multiples/test_sum-of-multiples.R +1 -1
  190. data/tracks/r/exercises/tournament/example.R +14 -8
  191. data/tracks/r/exercises/tournament/test_tournament.R +1 -1
  192. data/tracks/r/exercises/word-count/example.R +9 -2
  193. data/tracks/r/exercises/word-count/test_word-count.R +1 -1
  194. data/tracks/r/exercises/word-count/word-count.R +1 -1
  195. data/tracks/vimscript/README.md +14 -9
  196. metadata +4 -2
@@ -114,20 +114,6 @@ test_that("eliminates anagrams with the same checksum", {
114
114
  c())
115
115
  })
116
116
 
117
- test_that("detects unicode anagrams", {
118
- subject <- "ΑΒΓ"
119
- candidates <- c("ΒΓΑ", "ΒΓΔ", "γβα")
120
- expect_equal(anagram(subject, candidates),
121
- c("ΒΓΑ", "γβα"))
122
- })
123
-
124
- test_that("eliminates misleading unicode anagrams", {
125
- subject <- "ΑΒΓ"
126
- candidates <- c("ABΓ")
127
- expect_equal(anagram(subject, candidates),
128
- c())
129
- })
130
-
131
117
  test_that("capital word is not own anagram", {
132
118
  subject <- "BANANA"
133
119
  candidates <- c("Banana")
@@ -142,4 +128,4 @@ test_that("anagrams must use all letters exactly once", {
142
128
  c())
143
129
  })
144
130
 
145
- print("All tests passed!")
131
+ print("All tests passed for exercise: anagram")
@@ -1,3 +1,3 @@
1
- bob <- function() {
1
+ bob <- function(input) {
2
2
 
3
3
  }
@@ -3,7 +3,7 @@ bob <- function(input) {
3
3
  # with a couple different sentences
4
4
 
5
5
  # strip white space
6
- input <- gsub("[[:space:]]","",input)
6
+ input <- gsub("[[:space:]]", "", input)
7
7
 
8
8
  if (input == "") {
9
9
  return("Fine. Be that way!")
@@ -11,7 +11,7 @@ bob <- function(input) {
11
11
  if (toupper(input) == input && tolower(input) != input) {
12
12
  return("Whoa, chill out!")
13
13
  }
14
- if (endsWith(input,"?")) {
14
+ if (endsWith(input, "?")) {
15
15
  return("Sure.")
16
16
  }
17
17
  return("Whatever.")
@@ -85,18 +85,6 @@ test_that("talking forcefully", {
85
85
  "Whoa, chill out!")
86
86
  })
87
87
 
88
- test_that("shouting with umlauts", {
89
- input <- "ÜMLÄÜTS!"
90
- expect_equal(bob(input),
91
- "Whoa, chill out!")
92
- })
93
-
94
- test_that("calmly speaking with umlauts", {
95
- input <- "ÜMLäÜTS!"
96
- expect_equal(bob(input),
97
- "Whatever.")
98
- })
99
-
100
88
  test_that("shouting with no exclamation mark", {
101
89
  input <- "I HATE YOU"
102
90
  expect_equal(bob(input),
@@ -173,4 +161,4 @@ test_that("non-question ending with whitespace", {
173
161
  "Whatever.")
174
162
  })
175
163
 
176
- print("All tests passed!")
164
+ print("All tests passed for exercise: bob")
@@ -1,6 +1,6 @@
1
1
  difference_of_squares <- function(natural_number) {
2
- num_sequence <- seq_len(natural_number)
3
- square_sums <- sum(num_sequence)^2
4
- sum_squares <- sum(num_sequence^2)
5
- sum(square_sums - sum_squares)
6
- }
2
+ num_sequence <- seq_len(natural_number)
3
+ square_sums <- sum(num_sequence) ^ 2
4
+ sum_squares <- sum(num_sequence ^ 2)
5
+ sum(square_sums - sum_squares)
6
+ }
@@ -20,3 +20,5 @@ test_that("difference of squares 100", {
20
20
  input <- 100
21
21
  expect_equal(difference_of_squares(input), 25164150)
22
22
  })
23
+
24
+ print("All tests passed for exercise: difference-of-squares")
@@ -1,16 +1,16 @@
1
1
  square <- function(n) {
2
-
2
+
3
3
  if (n > 0 & n < 65) {
4
- 2^(n-1)
4
+ 2 ^ (n - 1)
5
5
  }
6
6
  else {
7
7
  stop("Input value should be between 1 and 64")
8
8
  }
9
-
9
+
10
10
  }
11
11
 
12
12
  total <- function() {
13
-
14
- sum(2^(0:63))
15
-
13
+
14
+ sum(2 ^ (0:63))
15
+
16
16
  }
@@ -1,7 +1,7 @@
1
1
  square <- function(n) {
2
-
2
+
3
3
  }
4
4
 
5
5
  total <- function() {
6
-
6
+
7
7
  }
@@ -45,5 +45,4 @@ test_that("returns the total number of square on the board", {
45
45
  expect_equal(total(), 18446744073709551615)
46
46
  })
47
47
 
48
-
49
- print("All tests passed!")
48
+ print("All tests passed for exercise: grains")
@@ -1,8 +1,8 @@
1
- hamming <- function(strand1,strand2) {
1
+ hamming <- function(strand1, strand2) {
2
2
  if (nchar(strand1) != nchar(strand2)) {
3
3
  stop("undefined hamming distance")
4
4
  }
5
- strand1 <- strsplit(strand1,"")[[1]]
6
- strand2 <- strsplit(strand2,"")[[1]]
5
+ strand1 <- strsplit(strand1, "")[[1]]
6
+ strand2 <- strsplit(strand2, "")[[1]]
7
7
  length(strand1) - sum(strand1 == strand2)
8
8
  }
@@ -1,4 +1,4 @@
1
1
  # This is a stub function to take two strings
2
2
  # and calculate the hamming distance
3
- hamming <- function(strand1,strand2) {
3
+ hamming <- function(strand1, strand2) {
4
4
  }
@@ -85,4 +85,4 @@ test_that("disallow second strand longer", {
85
85
  expect_error(hamming(strand1, strand2))
86
86
  })
87
87
 
88
- print("All tests passed!")
88
+ print("All tests passed for exercise: hamming")
@@ -1,3 +1,3 @@
1
1
  hello_world <- function(name = "World") {
2
- paste("Hello, ", name, "!", sep="")
2
+ paste("Hello, ", name, "!", sep = "")
3
3
  }
@@ -13,4 +13,4 @@ test_that("other sample name", {
13
13
  expect_equal(hello_world("Bob"), "Hello, Bob!")
14
14
  })
15
15
 
16
- print("All tests passed!")
16
+ print("All tests passed for exercise: hello-world")
@@ -1,9 +1,9 @@
1
1
  is_isogram <- function(word) {
2
-
2
+
3
3
  func <- function(x) {
4
4
  sum(x == unlist(strsplit(tolower(word), "")))
5
5
  }
6
-
7
- all(lapply(letters, FUN = func)<=1)
8
-
6
+
7
+ all(lapply(letters, FUN = func) <= 1)
8
+
9
9
  }
@@ -1,3 +1,3 @@
1
1
  is_isogram <- function(word) {
2
-
2
+
3
3
  }
@@ -41,4 +41,4 @@ test_that("made-up name that is an isogram", {
41
41
  expect_equal(is_isogram(word), TRUE)
42
42
  })
43
43
 
44
- print("All tests passed!")
44
+ print("All tests passed for exercise: isogram")
@@ -1,22 +1,22 @@
1
- largestSeriesProduct <- function(digits, span){
2
-
1
+ largest_series_product <- function(digits, span){
2
+
3
3
  nums <- as.numeric(unlist(strsplit(digits, "")))
4
-
4
+
5
5
  if (any(is.na(nums)) || span < 0 || span > length(nums)) {
6
6
  stop("Non-numeric characters or span less than digit length")
7
7
  }
8
-
8
+
9
9
  if (span == 0) {
10
- return (1)
10
+ return(1)
11
11
  }
12
-
13
- indices <- 1:(length(nums)-span+1)
14
-
12
+
13
+ indices <- 1:(length(nums) - span + 1)
14
+
15
15
  get_prod <- function(index, nums, span) {
16
- prod(nums[index:(index+span-1)])
16
+ prod(nums[index:(index + span - 1)])
17
17
  }
18
-
18
+
19
19
  products <- sapply(indices, FUN = get_prod, nums, span)
20
-
20
+
21
21
  max(products)
22
22
  }
@@ -1,3 +1,3 @@
1
- largestSeriesProduct <- function(digits, span){
2
-
1
+ largest_series_product <- function(digits, span){
2
+
3
3
  }
@@ -4,61 +4,61 @@ library(testthat)
4
4
  test_that("finds the largest product if span equals length", {
5
5
  digits <- "29"
6
6
  span <- 2
7
- expect_equal(largestSeriesProduct(digits, span), 18)
7
+ expect_equal(largest_series_product(digits, span), 18)
8
8
  })
9
9
 
10
10
  test_that("can find the largest product of 2 with numbers in order", {
11
11
  digits <- "0123456789"
12
12
  span <- 2
13
- expect_equal(largestSeriesProduct(digits, span), 72)
13
+ expect_equal(largest_series_product(digits, span), 72)
14
14
  })
15
15
 
16
16
  test_that("can find the largest product of 2", {
17
17
  digits <- "576802143"
18
18
  span <- 2
19
- expect_equal(largestSeriesProduct(digits, span), 48)
19
+ expect_equal(largest_series_product(digits, span), 48)
20
20
  })
21
21
 
22
22
  test_that("can find the largest product of 3 with numbers in order", {
23
23
  digits <- "0123456789"
24
24
  span <- 3
25
- expect_equal(largestSeriesProduct(digits, span), 504)
25
+ expect_equal(largest_series_product(digits, span), 504)
26
26
  })
27
27
 
28
28
  test_that("can find the largest product of 3", {
29
29
  digits <- "1027839564"
30
30
  span <- 3
31
- expect_equal(largestSeriesProduct(digits, span), 270)
31
+ expect_equal(largest_series_product(digits, span), 270)
32
32
  })
33
33
 
34
34
  test_that("can find the largest product of 5 with numbers in order", {
35
35
  digits <- "0123456789"
36
36
  span <- 5
37
- expect_equal(largestSeriesProduct(digits, span), 15120)
37
+ expect_equal(largest_series_product(digits, span), 15120)
38
38
  })
39
39
 
40
40
  test_that("can get the largest product of a big number", {
41
41
  digits <- "73167176531330624919225119674426574742355349194934"
42
42
  span <- 6
43
- expect_equal(largestSeriesProduct(digits, span), 23520)
43
+ expect_equal(largest_series_product(digits, span), 23520)
44
44
  })
45
45
 
46
46
  test_that("reports zero if the only digits are zero", {
47
47
  digits <- "0000"
48
48
  span <- 2
49
- expect_equal(largestSeriesProduct(digits, span), 0)
49
+ expect_equal(largest_series_product(digits, span), 0)
50
50
  })
51
51
 
52
52
  test_that("reports zero if all spans include zero", {
53
53
  digits <- "99099"
54
54
  span <- 3
55
- expect_equal(largestSeriesProduct(digits, span), 0)
55
+ expect_equal(largest_series_product(digits, span), 0)
56
56
  })
57
57
 
58
58
  test_that("rejects span longer than string length", {
59
59
  digits <- "123"
60
60
  span <- 4
61
- expect_error(largestSeriesProduct(digits, span))
61
+ expect_error(largest_series_product(digits, span))
62
62
  })
63
63
 
64
64
  # There may be some confusion about whether this should be 1 or error.
@@ -77,7 +77,7 @@ test_that("rejects span longer than string length", {
77
77
  test_that("reports 1 for empty string and empty product (0 span)", {
78
78
  digits <- ""
79
79
  span <- 0
80
- expect_equal(largestSeriesProduct(digits, span), 1)
80
+ expect_equal(largest_series_product(digits, span), 1)
81
81
  })
82
82
 
83
83
  # As above, there is one 0-character string in "123".
@@ -86,25 +86,25 @@ test_that("reports 1 for empty string and empty product (0 span)", {
86
86
  test_that("reports 1 for nonempty string and empty product (0 span)", {
87
87
  digits <- "123"
88
88
  span <- 0
89
- expect_equal(largestSeriesProduct(digits, span), 1)
89
+ expect_equal(largest_series_product(digits, span), 1)
90
90
  })
91
91
 
92
92
  test_that("rejects empty string and nonzero span", {
93
93
  digits <- ""
94
94
  span <- 1
95
- expect_error(largestSeriesProduct(digits, span))
95
+ expect_error(largest_series_product(digits, span))
96
96
  })
97
97
 
98
98
  test_that("rejects invalid character in digits", {
99
99
  digits <- "1234a5"
100
100
  span <- 2
101
- expect_error(largestSeriesProduct(digits, span))
101
+ expect_error(largest_series_product(digits, span))
102
102
  })
103
103
 
104
104
  test_that("rejects negative span", {
105
105
  digits <- "12345"
106
106
  span <- -1
107
- expect_error(largestSeriesProduct(digits, span))
107
+ expect_error(largest_series_product(digits, span))
108
108
  })
109
109
 
110
- print("All tests passed!")
110
+ print("All tests passed for exercise: largest-series-product")
@@ -1,3 +1,3 @@
1
1
  leap <- function(year) {
2
-
2
+
3
3
  }
@@ -21,4 +21,4 @@ test_that("year divisible by 400: leap year", {
21
21
  expect_equal(leap(year), TRUE)
22
22
  })
23
23
 
24
- print("All tests passed!")
24
+ print("All tests passed for exercise: leap")
@@ -1,23 +1,29 @@
1
+ library(magrittr)
2
+
1
3
  # Determine whether the number is valid.
2
4
  is_valid <- function(input) {
3
-
5
+
4
6
  # Strip spaces, check length & check for invalid characters
5
- input_vector <- strsplit(gsub(pattern = " ", replacement = "", input), "")[[1]]
7
+ input_vector <- gsub(pattern = " ", replacement = "", input) %>%
8
+ strsplit("") %>%
9
+ unlist()
6
10
  if (length(input_vector) < 2 || any(grepl("[^[:digit:]]", input_vector))) {
7
- return (FALSE)
11
+ return(FALSE)
8
12
  }
9
-
13
+
10
14
  # Convert to numeric
11
15
  num_vector <- as.numeric(input_vector)
12
-
16
+
13
17
  # Double every second digit starting from the right
14
18
  num_vector <- rev(num_vector)
15
- num_vector[seq(2,length(num_vector),2)] = num_vector[seq(2,length(num_vector),2)]*2
16
-
17
- # Subtract 9 if > 9 (can apply to all since no digit can be greater than 9 before doubling)
19
+ num_vector[seq(2, length(num_vector), 2)] <-
20
+ num_vector[seq(2, length(num_vector), 2)] * 2
21
+
22
+ # Subtract 9 if > 9 (can apply to all since no
23
+ # digit can be greater than 9 before doubling)
18
24
  num_vector <- ifelse(num_vector > 9, num_vector - 9, num_vector)
19
-
25
+
20
26
  # Check checksum is divisible by 10
21
27
  sum(num_vector) %% 10 == 0
22
-
28
+
23
29
  }
@@ -66,4 +66,4 @@ test_that("nine doubled is nine", {
66
66
  expect_equal(is_valid(input), TRUE)
67
67
  })
68
68
 
69
- print("All tests passed!")
69
+ print("All tests passed for exercise: luhn")
@@ -1,24 +1,24 @@
1
- pascalsTriangle <- function(n) {
2
-
1
+ pascals_triangle <- function(n) {
2
+
3
3
  if (n == 0) {
4
- return (list())
4
+ return(list())
5
5
  }
6
6
  else if (n == 1) {
7
- return (list(1))
7
+ return(list(1))
8
8
  }
9
9
  else if (n == 2) {
10
- return (list(1, c(1,1)))
10
+ return(list(1, c(1, 1)))
11
11
  }
12
12
  else if (n >= 3) {
13
- triangle <- list(1, c(1,1))
13
+ triangle <- list(1, c(1, 1))
14
14
  for (x in 3:n) {
15
15
  row <- rep(1, x)
16
- for (i in 2:(x-1)) {
17
- row[i] = sum(triangle[[x-1]][(i-1):i])
16
+ for (i in 2:(x - 1)) {
17
+ row[i] <- sum(triangle[[x - 1]][(i - 1):i])
18
18
  }
19
- triangle[[x]] = row
19
+ triangle[[x]] <- row
20
20
  }
21
- return (triangle)
21
+ return(triangle)
22
22
  }
23
23
  else {
24
24
  stop("argument n needs to be an integer")