trackler 2.1.0.21 → 2.1.0.22
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/trackler/version.rb +1 -1
- data/tracks/delphi/exercises/allergies/uAllergiesExample.pas +10 -3
- data/tracks/ocaml/.travis-ci.sh +3 -1
- data/tracks/ocaml/exercises/acronym/Makefile +1 -1
- data/tracks/ocaml/exercises/acronym/example.ml +1 -1
- data/tracks/ocaml/exercises/acronym/test.ml +2 -4
- data/tracks/ocaml/exercises/all-your-base/example.ml +1 -1
- data/tracks/ocaml/exercises/all-your-base/test.ml +1 -1
- data/tracks/ocaml/exercises/anagram/example.ml +1 -1
- data/tracks/ocaml/exercises/anagram/test.ml +1 -1
- data/tracks/ocaml/exercises/atbash-cipher/example.ml +1 -1
- data/tracks/ocaml/exercises/atbash-cipher/test.ml +1 -1
- data/tracks/ocaml/exercises/beer-song/example.ml +1 -1
- data/tracks/ocaml/exercises/beer-song/test.ml +1 -1
- data/tracks/ocaml/exercises/binary-search/Makefile +1 -1
- data/tracks/ocaml/exercises/binary-search/example.ml +5 -5
- data/tracks/ocaml/exercises/binary-search/test.ml +1 -1
- data/tracks/ocaml/exercises/bob/example.ml +1 -1
- data/tracks/ocaml/exercises/bob/test.ml +1 -1
- data/tracks/ocaml/exercises/bowling/bowling.mli +1 -1
- data/tracks/ocaml/exercises/bowling/example.ml +1 -1
- data/tracks/ocaml/exercises/bowling/test.ml +1 -1
- data/tracks/ocaml/exercises/bracket-push/example.ml +1 -1
- data/tracks/ocaml/exercises/bracket-push/test.ml +1 -1
- data/tracks/ocaml/exercises/change/example.ml +1 -1
- data/tracks/ocaml/exercises/change/test.ml +1 -1
- data/tracks/ocaml/exercises/connect/example.ml +1 -1
- data/tracks/ocaml/exercises/connect/test.ml +1 -1
- data/tracks/ocaml/exercises/difference-of-squares/example.ml +1 -1
- data/tracks/ocaml/exercises/difference-of-squares/test.ml +1 -1
- data/tracks/ocaml/exercises/dominoes/example.ml +1 -1
- data/tracks/ocaml/exercises/dominoes/test.ml +1 -1
- data/tracks/ocaml/exercises/etl/example.ml +1 -1
- data/tracks/ocaml/exercises/etl/test.ml +1 -1
- data/tracks/ocaml/exercises/grade-school/example.ml +1 -1
- data/tracks/ocaml/exercises/grade-school/grade_school.mli +1 -1
- data/tracks/ocaml/exercises/grade-school/test.ml +1 -1
- data/tracks/ocaml/exercises/hamming/example.ml +1 -1
- data/tracks/ocaml/exercises/hamming/test.ml +1 -1
- data/tracks/ocaml/exercises/hangman/example.ml +1 -1
- data/tracks/ocaml/exercises/hello-world/test.ml +1 -1
- data/tracks/ocaml/exercises/hexadecimal/example.ml +1 -1
- data/tracks/ocaml/exercises/hexadecimal/test.ml +1 -1
- data/tracks/ocaml/exercises/leap/test.ml +1 -1
- data/tracks/ocaml/exercises/list-ops/test.ml +1 -1
- data/tracks/ocaml/exercises/luhn/example.ml +1 -1
- data/tracks/ocaml/exercises/luhn/test.ml +1 -1
- data/tracks/ocaml/exercises/meetup/example.ml +1 -1
- data/tracks/ocaml/exercises/meetup/test.ml +1 -1
- data/tracks/ocaml/exercises/minesweeper/example.ml +1 -1
- data/tracks/ocaml/exercises/minesweeper/test.ml +1 -1
- data/tracks/ocaml/exercises/nucleotide-count/example.ml +1 -1
- data/tracks/ocaml/exercises/nucleotide-count/nucleotide_count.mli +1 -1
- data/tracks/ocaml/exercises/nucleotide-count/test.ml +1 -1
- data/tracks/ocaml/exercises/pangram/example.ml +1 -1
- data/tracks/ocaml/exercises/pangram/test.ml +1 -1
- data/tracks/ocaml/exercises/phone-number/example.ml +1 -1
- data/tracks/ocaml/exercises/phone-number/test.ml +1 -1
- data/tracks/ocaml/exercises/prime-factors/example.ml +1 -1
- data/tracks/ocaml/exercises/prime-factors/test.ml +1 -1
- data/tracks/ocaml/exercises/raindrops/example.ml +1 -1
- data/tracks/ocaml/exercises/raindrops/test.ml +1 -1
- data/tracks/ocaml/exercises/rna-transcription/example.ml +1 -1
- data/tracks/ocaml/exercises/rna-transcription/test.ml +1 -1
- data/tracks/ocaml/exercises/robot-name/example.ml +1 -1
- data/tracks/ocaml/exercises/robot-name/test.ml +1 -1
- data/tracks/ocaml/exercises/roman-numerals/test.ml +1 -1
- data/tracks/ocaml/exercises/run-length-encoding/example.ml +1 -1
- data/tracks/ocaml/exercises/run-length-encoding/test.ml +1 -1
- data/tracks/ocaml/exercises/say/example.ml +1 -1
- data/tracks/ocaml/exercises/say/test.ml +1 -1
- data/tracks/ocaml/exercises/space-age/example.ml +1 -1
- data/tracks/ocaml/exercises/space-age/test.ml +1 -1
- data/tracks/ocaml/exercises/triangle/example.ml +1 -1
- data/tracks/ocaml/exercises/triangle/test.ml +1 -1
- data/tracks/ocaml/exercises/word-count/example.ml +1 -1
- data/tracks/ocaml/exercises/word-count/test.ml +1 -1
- data/tracks/ocaml/exercises/word-count/word_count.mli +1 -3
- data/tracks/ocaml/exercises/zipper/example.ml +1 -1
- data/tracks/ocaml/exercises/zipper/test.ml +1 -1
- data/tracks/ocaml/exercises/zipper/tree.ml +1 -1
- data/tracks/ocaml/exercises/zipper/tree.mli +1 -1
- data/tracks/ocaml/exercises/zipper/zipper.mli +1 -1
- data/tracks/ocaml/tools/test-generator/src/canonical_data_checker.ml +1 -1
- data/tracks/ocaml/tools/test-generator/src/codegen.ml +1 -1
- data/tracks/ocaml/tools/test-generator/src/controller.ml +1 -1
- data/tracks/ocaml/tools/test-generator/src/debug.ml +1 -1
- data/tracks/ocaml/tools/test-generator/src/files.ml +1 -1
- data/tracks/ocaml/tools/test-generator/src/model.ml +1 -1
- data/tracks/ocaml/tools/test-generator/src/parser.ml +5 -5
- data/tracks/ocaml/tools/test-generator/src/special_cases.ml +1 -1
- data/tracks/ocaml/tools/test-generator/src/template.ml +1 -1
- data/tracks/ocaml/tools/test-generator/src/test_gen.ml +1 -1
- data/tracks/ocaml/tools/test-generator/src/utils.ml +2 -2
- data/tracks/ocaml/tools/test-generator/templates/acronym/template.ml +1 -1
- data/tracks/ocaml/tools/test-generator/templates/all-your-base/template.ml +1 -1
- data/tracks/ocaml/tools/test-generator/templates/anagram/template.ml +1 -1
- data/tracks/ocaml/tools/test-generator/templates/atbash-cipher/template.ml +1 -1
- data/tracks/ocaml/tools/test-generator/templates/beer-song/template.ml +1 -1
- data/tracks/ocaml/tools/test-generator/templates/binary-search/template.ml +1 -1
- data/tracks/ocaml/tools/test-generator/templates/bob/template.ml +1 -1
- data/tracks/ocaml/tools/test-generator/templates/bowling/template.ml +1 -1
- data/tracks/ocaml/tools/test-generator/templates/bracket-push/template.ml +1 -1
- data/tracks/ocaml/tools/test-generator/templates/change/template.ml +1 -1
- data/tracks/ocaml/tools/test-generator/templates/connect/template.ml +1 -1
- data/tracks/ocaml/tools/test-generator/templates/difference-of-squares/template.ml +1 -1
- data/tracks/ocaml/tools/test-generator/templates/dominoes/template.ml +1 -1
- data/tracks/ocaml/tools/test-generator/templates/etl/template.ml +1 -1
- data/tracks/ocaml/tools/test-generator/templates/hamming/template.ml +1 -1
- data/tracks/ocaml/tools/test-generator/templates/hello-world/template.ml +1 -1
- data/tracks/ocaml/tools/test-generator/templates/leap/template.ml +1 -1
- data/tracks/ocaml/tools/test-generator/templates/luhn/template.ml +1 -1
- data/tracks/ocaml/tools/test-generator/templates/minesweeper/template.ml +1 -1
- data/tracks/ocaml/tools/test-generator/templates/pangram/template.ml +1 -1
- data/tracks/ocaml/tools/test-generator/templates/phone-number/template.ml +1 -1
- data/tracks/ocaml/tools/test-generator/templates/prime-factors/template.ml +1 -1
- data/tracks/ocaml/tools/test-generator/templates/raindrops/template.ml +1 -1
- data/tracks/ocaml/tools/test-generator/templates/roman-numerals/template.ml +1 -1
- data/tracks/ocaml/tools/test-generator/templates/run-length-encoding/template.ml +1 -1
- data/tracks/ocaml/tools/test-generator/templates/say/template.ml +1 -1
- data/tracks/ocaml/tools/test-generator/templates/space-age/template.ml +1 -1
- data/tracks/ocaml/tools/test-generator/templates/triangle/template.ml +1 -1
- data/tracks/ocaml/tools/test-generator/templates/word-count/template.ml +1 -1
- data/tracks/ocaml/tools/test-generator/test/all_tests.ml +1 -1
- data/tracks/ocaml/tools/test-generator/test/codegen_test.ml +1 -1
- data/tracks/ocaml/tools/test-generator/test/model_test.ml +1 -1
- data/tracks/ocaml/tools/test-generator/test/parser_test.ml +1 -1
- data/tracks/ocaml/tools/test-generator/test/special_cases_test.ml +1 -1
- data/tracks/ocaml/tools/test-generator/test/template_test.ml +1 -1
- data/tracks/ocaml/tools/test-generator/test/utils_test.ml +1 -1
- data/tracks/r/.travis.yml +13 -2
- data/tracks/r/README.md +35 -16
- data/tracks/r/bin/run_lints.R +30 -0
- data/tracks/r/bin/run_tests.R +35 -0
- data/tracks/r/exercises/anagram/anagram.R +1 -1
- data/tracks/r/exercises/anagram/example.R +5 -5
- data/tracks/r/exercises/anagram/test_anagram.R +1 -15
- data/tracks/r/exercises/bob/bob.R +1 -1
- data/tracks/r/exercises/bob/example.R +2 -2
- data/tracks/r/exercises/bob/test_bob.R +1 -13
- data/tracks/r/exercises/difference-of-squares/example.R +5 -5
- data/tracks/r/exercises/difference-of-squares/test_difference-of-squares.R +2 -0
- data/tracks/r/exercises/grains/example.R +6 -6
- data/tracks/r/exercises/grains/grains.R +2 -2
- data/tracks/r/exercises/grains/test_grains.R +1 -2
- data/tracks/r/exercises/hamming/example.R +3 -3
- data/tracks/r/exercises/hamming/hamming.R +1 -1
- data/tracks/r/exercises/hamming/test_hamming.R +1 -1
- data/tracks/r/exercises/hello-world/example.R +1 -1
- data/tracks/r/exercises/hello-world/test_hello-world.R +1 -1
- data/tracks/r/exercises/isogram/example.R +4 -4
- data/tracks/r/exercises/isogram/isogram.R +1 -1
- data/tracks/r/exercises/isogram/test_isogram.R +1 -1
- data/tracks/r/exercises/largest-series-product/example.R +11 -11
- data/tracks/r/exercises/largest-series-product/largest-series-product.R +2 -2
- data/tracks/r/exercises/largest-series-product/test_largest-series-product.R +16 -16
- data/tracks/r/exercises/leap/leap.R +1 -1
- data/tracks/r/exercises/leap/test_leap.R +1 -1
- data/tracks/r/exercises/luhn/example.R +16 -10
- data/tracks/r/exercises/luhn/test_luhn.R +1 -1
- data/tracks/r/exercises/pascals-triangle/example.R +10 -10
- data/tracks/r/exercises/pascals-triangle/pascals-triangle.R +2 -2
- data/tracks/r/exercises/pascals-triangle/test_pascals-triangle.R +8 -8
- data/tracks/r/exercises/perfect-numbers/example.R +3 -3
- data/tracks/r/exercises/perfect-numbers/perfect-numbers.R +1 -1
- data/tracks/r/exercises/perfect-numbers/test_perfect-numbers.R +12 -12
- data/tracks/r/exercises/phone-number/example.R +8 -8
- data/tracks/r/exercises/phone-number/phone-number.R +1 -1
- data/tracks/r/exercises/phone-number/test_phone-number.R +11 -11
- data/tracks/r/exercises/prime-factors/example.R +2 -2
- data/tracks/r/exercises/prime-factors/prime-factors.R +1 -1
- data/tracks/r/exercises/prime-factors/test_prime-factors.R +1 -1
- data/tracks/r/exercises/raindrops/example.R +12 -11
- data/tracks/r/exercises/raindrops/test_raindrops.R +3 -2
- data/tracks/r/exercises/rna-transcription/example.R +3 -3
- data/tracks/r/exercises/rna-transcription/test_rna-transcription.R +1 -1
- data/tracks/r/exercises/rotational-cipher/example.R +7 -7
- data/tracks/r/exercises/rotational-cipher/test_rotational-cipher.R +3 -2
- data/tracks/r/exercises/scrabble-score/example.R +5 -4
- data/tracks/r/exercises/scrabble-score/scrabble-score.R +1 -1
- data/tracks/r/exercises/scrabble-score/test_scrabble-score.R +12 -12
- data/tracks/r/exercises/secret-handshake/example.R +6 -6
- data/tracks/r/exercises/secret-handshake/test_secret-handshake.R +5 -3
- data/tracks/r/exercises/sieve/test_sieve.R +1 -1
- data/tracks/r/exercises/space-age/example.R +8 -3
- data/tracks/r/exercises/space-age/space-age.R +1 -1
- data/tracks/r/exercises/space-age/test_space-age.R +1 -1
- data/tracks/r/exercises/sum-of-multiples/test_sum-of-multiples.R +1 -1
- data/tracks/r/exercises/tournament/example.R +14 -8
- data/tracks/r/exercises/tournament/test_tournament.R +1 -1
- data/tracks/r/exercises/word-count/example.R +9 -2
- data/tracks/r/exercises/word-count/test_word-count.R +1 -1
- data/tracks/r/exercises/word-count/word-count.R +1 -1
- data/tracks/vimscript/README.md +14 -9
- 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")
|
@@ -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
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
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
|
+
}
|
@@ -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,22 +1,22 @@
|
|
1
|
-
|
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
|
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
|
-
|
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(
|
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(
|
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(
|
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(
|
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(
|
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(
|
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(
|
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(
|
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(
|
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(
|
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(
|
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(
|
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(
|
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(
|
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(
|
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,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 <-
|
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
|
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)]
|
16
|
-
|
17
|
-
|
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
|
}
|
@@ -1,24 +1,24 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
pascals_triangle <- function(n) {
|
2
|
+
|
3
3
|
if (n == 0) {
|
4
|
-
return
|
4
|
+
return(list())
|
5
5
|
}
|
6
6
|
else if (n == 1) {
|
7
|
-
return
|
7
|
+
return(list(1))
|
8
8
|
}
|
9
9
|
else if (n == 2) {
|
10
|
-
return
|
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]
|
16
|
+
for (i in 2:(x - 1)) {
|
17
|
+
row[i] <- sum(triangle[[x - 1]][(i - 1):i])
|
18
18
|
}
|
19
|
-
triangle[[x]]
|
19
|
+
triangle[[x]] <- row
|
20
20
|
}
|
21
|
-
return
|
21
|
+
return(triangle)
|
22
22
|
}
|
23
23
|
else {
|
24
24
|
stop("argument n needs to be an integer")
|