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
@@ -1,3 +1,3 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
pascals_triangle <- function(n) {
|
2
|
+
|
3
3
|
}
|
@@ -2,31 +2,31 @@ source("./pascals-triangle.R")
|
|
2
2
|
library(testthat)
|
3
3
|
|
4
4
|
test_that("zero rows", {
|
5
|
-
expect_equal(
|
5
|
+
expect_equal(pascals_triangle(0), list())
|
6
6
|
})
|
7
7
|
|
8
8
|
test_that("single row", {
|
9
|
-
expect_equal(
|
9
|
+
expect_equal(pascals_triangle(1), list(1))
|
10
10
|
})
|
11
11
|
|
12
12
|
test_that("two rows", {
|
13
|
-
expect_equal(
|
13
|
+
expect_equal(pascals_triangle(2), list(1, c(1, 1)))
|
14
14
|
})
|
15
15
|
|
16
16
|
test_that("three rows", {
|
17
|
-
expect_equal(
|
17
|
+
expect_equal(pascals_triangle(3), list(1, c(1, 1), c(1, 2, 1)))
|
18
18
|
})
|
19
19
|
|
20
20
|
test_that("four rows", {
|
21
|
-
expect_equal(
|
21
|
+
expect_equal(pascals_triangle(4), list(1, c(1, 1), c(1, 2, 1), c(1, 3, 3, 1)))
|
22
22
|
})
|
23
23
|
|
24
24
|
test_that("negative rows", {
|
25
|
-
expect_error(
|
25
|
+
expect_error(pascals_triangle(-1))
|
26
26
|
})
|
27
27
|
|
28
28
|
test_that("null/no rows", {
|
29
|
-
expect_error(
|
29
|
+
expect_error(pascals_triangle(NULL))
|
30
30
|
})
|
31
31
|
|
32
|
-
print("All tests passed
|
32
|
+
print("All tests passed for exercise: pascals-triangle")
|
@@ -1,6 +1,6 @@
|
|
1
|
-
|
1
|
+
is_perfect <- function(n){
|
2
2
|
|
3
|
-
|
3
|
+
find_factors <- function(n) {
|
4
4
|
factors <- c()
|
5
5
|
for (i in 2:floor(n^0.5 + 1)) {
|
6
6
|
|
@@ -17,6 +17,6 @@ isPerfect <- function(n){
|
|
17
17
|
unique(factors)
|
18
18
|
}
|
19
19
|
|
20
|
-
sum(
|
20
|
+
sum(find_factors(n)) + 1 == n
|
21
21
|
|
22
22
|
}
|
@@ -3,57 +3,57 @@ library(testthat)
|
|
3
3
|
|
4
4
|
test_that("first perfect number", {
|
5
5
|
n <- 6
|
6
|
-
expect_equal(
|
6
|
+
expect_equal(is_perfect(n), TRUE)
|
7
7
|
})
|
8
8
|
|
9
9
|
test_that("no perfect number", {
|
10
10
|
n <- 8
|
11
|
-
expect_equal(
|
11
|
+
expect_equal(is_perfect(n), FALSE)
|
12
12
|
})
|
13
13
|
|
14
14
|
test_that("second perfect number", {
|
15
15
|
n <- 28
|
16
|
-
expect_equal(
|
16
|
+
expect_equal(is_perfect(n), TRUE)
|
17
17
|
})
|
18
18
|
|
19
19
|
test_that("abundant", {
|
20
20
|
n <- 20
|
21
|
-
expect_equal(
|
21
|
+
expect_equal(is_perfect(n), FALSE)
|
22
22
|
})
|
23
23
|
|
24
24
|
test_that("answer to the ultimate question of life", {
|
25
25
|
n <- 42
|
26
|
-
expect_equal(
|
26
|
+
expect_equal(is_perfect(n), FALSE)
|
27
27
|
})
|
28
28
|
|
29
29
|
test_that("third perfect number", {
|
30
30
|
n <- 496
|
31
|
-
expect_equal(
|
31
|
+
expect_equal(is_perfect(n), TRUE)
|
32
32
|
})
|
33
33
|
|
34
34
|
test_that("odd abundant", {
|
35
35
|
n <- 945
|
36
|
-
expect_equal(
|
36
|
+
expect_equal(is_perfect(n), FALSE)
|
37
37
|
})
|
38
38
|
|
39
39
|
test_that("fourth perfect number", {
|
40
40
|
n <- 8128
|
41
|
-
expect_equal(
|
41
|
+
expect_equal(is_perfect(n), TRUE)
|
42
42
|
})
|
43
43
|
|
44
44
|
test_that("fifth perfect number", {
|
45
45
|
n <- 33550336
|
46
|
-
expect_equal(
|
46
|
+
expect_equal(is_perfect(n), TRUE)
|
47
47
|
})
|
48
48
|
|
49
49
|
test_that("sixth perfect number", {
|
50
50
|
n <- 8589869056
|
51
|
-
expect_equal(
|
51
|
+
expect_equal(is_perfect(n), TRUE)
|
52
52
|
})
|
53
53
|
|
54
54
|
test_that("seventh perfect number", {
|
55
55
|
n <- 137438691328
|
56
|
-
expect_equal(
|
56
|
+
expect_equal(is_perfect(n), TRUE)
|
57
57
|
})
|
58
58
|
|
59
|
-
print("All tests passed
|
59
|
+
print("All tests passed for exercise: perfect-numbers")
|
@@ -1,18 +1,18 @@
|
|
1
|
-
|
1
|
+
parse_phone_number <- function(number_string) {
|
2
2
|
|
3
|
-
# If the
|
4
|
-
# If the
|
5
|
-
# If the
|
6
|
-
# If the
|
7
|
-
# If the
|
3
|
+
# If the number is less than 10 digits assume that it is bad number
|
4
|
+
# If the number is 10 digits assume that it is good
|
5
|
+
# If the number is 11 digits and the first number is 1, use the last 10 digits
|
6
|
+
# If the number is 11 digits and the first number is not 1, it is a bad number
|
7
|
+
# If the number is more than 11 digits assume that it is a bad number
|
8
8
|
|
9
9
|
# Check for letters
|
10
|
-
if (grepl("[A-z]",
|
10
|
+
if (grepl("[A-z]", number_string)) {
|
11
11
|
return (NULL)
|
12
12
|
}
|
13
13
|
|
14
14
|
# Remove non-digit characters from number string
|
15
|
-
cleaned <- gsub("[^0-9]", "",
|
15
|
+
cleaned <- gsub("[^0-9]", "", number_string)
|
16
16
|
|
17
17
|
if (nchar(cleaned) < 10) {
|
18
18
|
NULL
|
@@ -2,43 +2,43 @@ source("./phone-number.R")
|
|
2
2
|
library(testthat)
|
3
3
|
|
4
4
|
test_that("cleans the number", {
|
5
|
-
expect_equal(
|
5
|
+
expect_equal(parse_phone_number("(123) 456-7890"), "1234567890")
|
6
6
|
})
|
7
7
|
|
8
8
|
test_that("cleans numbers with dots", {
|
9
|
-
expect_equal(
|
9
|
+
expect_equal(parse_phone_number("123.456.7890"), "1234567890")
|
10
10
|
})
|
11
11
|
|
12
12
|
test_that("cleans numbers with multiple spaces", {
|
13
|
-
expect_equal(
|
13
|
+
expect_equal(parse_phone_number("123 456 7890 "), "1234567890")
|
14
14
|
})
|
15
15
|
|
16
16
|
test_that("invalid when 9 digits", {
|
17
|
-
expect_equal(
|
17
|
+
expect_equal(parse_phone_number("123456789"), NULL)
|
18
18
|
})
|
19
19
|
|
20
20
|
test_that("invalid when 11 digits", {
|
21
|
-
expect_equal(
|
21
|
+
expect_equal(parse_phone_number("21234567890"), NULL)
|
22
22
|
})
|
23
23
|
|
24
24
|
test_that("valid when 11 digits and starting with 1", {
|
25
|
-
expect_equal(
|
25
|
+
expect_equal(parse_phone_number("11234567890"), "1234567890")
|
26
26
|
})
|
27
27
|
|
28
28
|
test_that("invalid when 12 digits", {
|
29
|
-
expect_equal(
|
29
|
+
expect_equal(parse_phone_number("321234567890"), NULL)
|
30
30
|
})
|
31
31
|
|
32
32
|
test_that("invalid with letters", {
|
33
|
-
expect_equal(
|
33
|
+
expect_equal(parse_phone_number("123-abc-7890"), NULL)
|
34
34
|
})
|
35
35
|
|
36
36
|
test_that("invalid with punctuations", {
|
37
|
-
expect_equal(
|
37
|
+
expect_equal(parse_phone_number("123-@:!-7890"), NULL)
|
38
38
|
})
|
39
39
|
|
40
40
|
test_that("invalid with right number of digits but letters mixed in", {
|
41
|
-
expect_equal(
|
41
|
+
expect_equal(parse_phone_number("1a2b3c4d5e6f7g8h9i0j"), NULL)
|
42
42
|
})
|
43
43
|
|
44
|
-
print("All tests passed
|
44
|
+
print("All tests passed for exercise: phone-number")
|
@@ -1,10 +1,10 @@
|
|
1
1
|
prime_factors <- function(number) {
|
2
2
|
factors <- c()
|
3
|
-
lowest.factor
|
3
|
+
lowest.factor <- 2
|
4
4
|
while (number > 1) {
|
5
5
|
if (number %% lowest.factor == 0) {
|
6
6
|
number <- number / lowest.factor
|
7
|
-
factors[length(factors) + 1]
|
7
|
+
factors[length(factors) + 1] <- lowest.factor
|
8
8
|
}
|
9
9
|
else {
|
10
10
|
lowest.factor <- lowest.factor + 1
|
@@ -1,28 +1,29 @@
|
|
1
1
|
raindrops <- function(number) {
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
pling <- ''
|
4
|
+
plang <- ''
|
5
|
+
plong <- ''
|
6
6
|
|
7
7
|
# If the number has 3 as a factor, output 'Pling'.
|
8
8
|
if (number %% 3 == 0) {
|
9
|
-
|
9
|
+
pling <- 'Pling'
|
10
10
|
}
|
11
11
|
# If the number has 5 as a factor, output 'Plang'.
|
12
12
|
if (number %% 5 == 0) {
|
13
|
-
|
13
|
+
plang <- 'Plang'
|
14
14
|
}
|
15
15
|
# If the number has 7 as a factor, output 'Plong'.
|
16
16
|
if (number %% 7 == 0) {
|
17
|
-
|
17
|
+
plong <- 'Plong'
|
18
18
|
}
|
19
19
|
|
20
|
-
|
20
|
+
plingplangplong <- paste(pling, plang, plong, sep = "")
|
21
21
|
|
22
|
-
# If the number does not have 3, 5, or 7 as a factor,
|
23
|
-
|
24
|
-
|
22
|
+
# If the number does not have 3, 5, or 7 as a factor,
|
23
|
+
# just pass the number's digits straight through
|
24
|
+
if (plingplangplong == "") {
|
25
|
+
plingplangplong <- as.character(number)
|
25
26
|
}
|
26
27
|
|
27
|
-
|
28
|
+
plingplangplong
|
28
29
|
}
|
@@ -26,7 +26,8 @@ test_that("the sound for 6 is Pling as it has a factor 3", {
|
|
26
26
|
expect_equal(raindrops(number), "Pling")
|
27
27
|
})
|
28
28
|
|
29
|
-
test_that("2 to the power 3 does not make a raindrop sound as 3 is the exponent
|
29
|
+
test_that("2 to the power 3 does not make a raindrop sound as 3 is the exponent
|
30
|
+
not the base", {
|
30
31
|
number <- 8
|
31
32
|
expect_equal(raindrops(number), "8")
|
32
33
|
})
|
@@ -91,4 +92,4 @@ test_that("the sound for 3125 is Plang as it has a factor 5", {
|
|
91
92
|
expect_equal(raindrops(number), "Plang")
|
92
93
|
})
|
93
94
|
|
94
|
-
print("All tests passed
|
95
|
+
print("All tests passed for exercise: raindrops")
|
@@ -1,14 +1,14 @@
|
|
1
1
|
to_rna <- function(dna) {
|
2
2
|
|
3
|
-
dna_to_rna <- list(G="C", C="G", T="A", A="U")
|
3
|
+
dna_to_rna <- list(G = "C", C = "G", T = "A", A = "U")
|
4
4
|
|
5
5
|
func <- function(x) {
|
6
|
-
if (!(x %in% c("G","C","T","A"))) {
|
6
|
+
if (!(x %in% c("G", "C", "T", "A"))) {
|
7
7
|
stop("invalid dna strand")
|
8
8
|
}
|
9
9
|
dna_to_rna[[x]]
|
10
10
|
}
|
11
11
|
|
12
|
-
paste(lapply(strsplit(dna, "")[[1]], FUN=func), collapse = "")
|
12
|
+
paste(lapply(strsplit(dna, "")[[1]], FUN = func), collapse = "")
|
13
13
|
|
14
14
|
}
|
@@ -1,22 +1,22 @@
|
|
1
1
|
rotate <- function(text, key) {
|
2
2
|
|
3
3
|
# Split string into character vector
|
4
|
-
|
4
|
+
text_vector <- unlist(strsplit(text, ""))
|
5
5
|
|
6
6
|
# Record which characters are upper case
|
7
|
-
|
7
|
+
upper_case <- toupper(text_vector) == text_vector
|
8
8
|
|
9
9
|
# Rotate letter characters
|
10
|
-
|
11
|
-
|
10
|
+
rotation_index <- (match(tolower(text_vector), letters) + key - 1) %% 26 + 1
|
11
|
+
rotated_vector <- letters[rotation_index]
|
12
12
|
|
13
13
|
# Restore non-letter characters in rotated character vector
|
14
|
-
|
14
|
+
rotated_vector[is.na(rotated_vector)] <- text_vector[is.na(rotated_vector)]
|
15
15
|
|
16
16
|
# Restore upper case characters
|
17
|
-
|
17
|
+
rotated_vector[upper_case] <- toupper(rotated_vector[upper_case])
|
18
18
|
|
19
19
|
# Collapse character vector into string
|
20
|
-
paste(
|
20
|
+
paste(rotated_vector, collapse = "")
|
21
21
|
|
22
22
|
}
|
@@ -58,7 +58,8 @@ test_that("rotate punctuation", {
|
|
58
58
|
test_that("rotate all letters", {
|
59
59
|
text <- "The quick brown fox jumps over the lazy dog."
|
60
60
|
key <- 13
|
61
|
-
expect_equal(rotate(text, key),
|
61
|
+
expect_equal(rotate(text, key),
|
62
|
+
"Gur dhvpx oebja sbk whzcf bire gur ynml qbt.")
|
62
63
|
})
|
63
64
|
|
64
|
-
print("All tests passed
|
65
|
+
print("All tests passed for exercise: rotational-cipher")
|
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
scrabble_score <- function(input){
|
2
2
|
|
3
3
|
# Letter Value
|
4
4
|
# A, E, I, O, U, L, N, R, S, T 1
|
@@ -9,11 +9,12 @@ scrabbleScore <- function(input){
|
|
9
9
|
# J, X 8
|
10
10
|
# Q, Z 10
|
11
11
|
|
12
|
-
|
13
|
-
|
12
|
+
letter_score <- c(1, 3, 3, 2, 1, 4, 2, 4, 1, 8, 5, 1, 3, 1,
|
13
|
+
1, 3, 10, 1, 1, 1, 1, 4, 4, 8, 4, 10)
|
14
|
+
names(letter_score) <- LETTERS
|
14
15
|
|
15
16
|
chars <- unlist(strsplit(input, ""))
|
16
17
|
|
17
|
-
sum(
|
18
|
+
sum(letter_score[toupper(chars)])
|
18
19
|
|
19
20
|
}
|
@@ -3,57 +3,57 @@ library(testthat)
|
|
3
3
|
|
4
4
|
test_that("lowercase letter", {
|
5
5
|
input <- "a"
|
6
|
-
expect_equal(
|
6
|
+
expect_equal(scrabble_score(input), 1)
|
7
7
|
})
|
8
8
|
|
9
9
|
test_that("uppercase letter", {
|
10
10
|
input <- "A"
|
11
|
-
expect_equal(
|
11
|
+
expect_equal(scrabble_score(input), 1)
|
12
12
|
})
|
13
13
|
|
14
14
|
test_that("valuable letter", {
|
15
15
|
input <- "f"
|
16
|
-
expect_equal(
|
16
|
+
expect_equal(scrabble_score(input), 4)
|
17
17
|
})
|
18
18
|
|
19
19
|
test_that("short word", {
|
20
20
|
input <- "at"
|
21
|
-
expect_equal(
|
21
|
+
expect_equal(scrabble_score(input), 2)
|
22
22
|
})
|
23
23
|
|
24
24
|
test_that("short, valuable word", {
|
25
25
|
input <- "zoo"
|
26
|
-
expect_equal(
|
26
|
+
expect_equal(scrabble_score(input), 12)
|
27
27
|
})
|
28
28
|
|
29
29
|
test_that("medium word", {
|
30
30
|
input <- "street"
|
31
|
-
expect_equal(
|
31
|
+
expect_equal(scrabble_score(input), 6)
|
32
32
|
})
|
33
33
|
|
34
34
|
test_that("medium, valuable word", {
|
35
35
|
input <- "quirky"
|
36
|
-
expect_equal(
|
36
|
+
expect_equal(scrabble_score(input), 22)
|
37
37
|
})
|
38
38
|
|
39
39
|
test_that("long, mixed-case word", {
|
40
40
|
input <- "OxyphenButazone"
|
41
|
-
expect_equal(
|
41
|
+
expect_equal(scrabble_score(input), 41)
|
42
42
|
})
|
43
43
|
|
44
44
|
test_that("english-like word", {
|
45
45
|
input <- "pinata"
|
46
|
-
expect_equal(
|
46
|
+
expect_equal(scrabble_score(input), 8)
|
47
47
|
})
|
48
48
|
|
49
49
|
test_that("empty input", {
|
50
50
|
input <- ""
|
51
|
-
expect_equal(
|
51
|
+
expect_equal(scrabble_score(input), 0)
|
52
52
|
})
|
53
53
|
|
54
54
|
test_that("entire alphabet available", {
|
55
55
|
input <- "abcdefghijklmnopqrstuvwxyz"
|
56
|
-
expect_equal(
|
56
|
+
expect_equal(scrabble_score(input), 87)
|
57
57
|
})
|
58
58
|
|
59
|
-
print("All tests passed
|
59
|
+
print("All tests passed for exercise: scrabble-score")
|