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
data/tracks/r/.travis.yml
CHANGED
@@ -1,6 +1,17 @@
|
|
1
1
|
---
|
2
|
-
language:
|
2
|
+
language: R
|
3
|
+
cache: packages
|
4
|
+
r:
|
5
|
+
- oldrel
|
6
|
+
- release
|
7
|
+
- devel
|
8
|
+
install:
|
9
|
+
- R -e "install.packages('testthat')"
|
10
|
+
- R -e "install.packages('jsonlite')"
|
11
|
+
- R -e "install.packages('lintr')"
|
12
|
+
- R -e "install.packages('magrittr')"
|
3
13
|
script:
|
4
14
|
- bin/fetch-configlet
|
5
15
|
- bin/configlet .
|
6
|
-
|
16
|
+
- R -e "source('bin/run_tests.R')"
|
17
|
+
- R -e "source('bin/run_lints.R')"
|
data/tracks/r/README.md
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
# xR
|
2
2
|
|
3
|
+
[![Build Status](https://travis-ci.org/exercism/xr.svg?branch=master)](https://travis-ci.org/exercism/xr)
|
4
|
+
[![Gitter](https://badges.gitter.im/exercism/dev.svg)](https://gitter.im/exercism/dev?utm_source=share-link&utm_medium=link&utm_campaign=share-link)
|
5
|
+
|
3
6
|
Exercism problems in R
|
4
7
|
|
5
8
|
## Contributing Guide
|
@@ -52,8 +55,19 @@ A general description of all the files and directories can be found [here](https
|
|
52
55
|
|
53
56
|
#### Directory structure
|
54
57
|
```bash
|
58
|
+
├── .gitignore
|
59
|
+
├── .travis.yml
|
60
|
+
├── .github
|
61
|
+
│ └── stale.yml
|
62
|
+
├── config.json
|
63
|
+
├── README.md
|
64
|
+
└── LICENSE
|
65
|
+
├── img
|
66
|
+
│ └── icon.png
|
55
67
|
├── bin
|
56
|
-
│
|
68
|
+
│ ├── fetch‐configlet
|
69
|
+
│ ├── run_lints.R
|
70
|
+
│ └── run_tests.R
|
57
71
|
├── docs
|
58
72
|
│ ├── ABOUT.md
|
59
73
|
│ ├── INSTALLATION.md
|
@@ -62,31 +76,24 @@ A general description of all the files and directories can be found [here](https
|
|
62
76
|
│ └── TESTS.md
|
63
77
|
└── exercises
|
64
78
|
├── TRACK_HINTS.md
|
65
|
-
|
79
|
+
├── <exercise-name>
|
66
80
|
│ ├── <exercise-name>.R
|
67
|
-
│
|
81
|
+
│ ├── example.R
|
68
82
|
│ └── test_<exercise-name>.R
|
69
|
-
|
83
|
+
├── <exercise-name>
|
70
84
|
│ ├── <exercise-name>.R
|
71
|
-
│
|
85
|
+
│ ├── example.R
|
72
86
|
│ └── test_<exercise-name>.R
|
73
87
|
└── ...
|
74
|
-
└── img
|
75
|
-
└── icon.png
|
76
|
-
├── .gitignore
|
77
|
-
├── .travis.yml
|
78
|
-
├── LICENSE
|
79
|
-
├── README.md
|
80
|
-
└── config.json
|
81
88
|
```
|
82
89
|
- `config.json`: Note that every exercise has to be registered here, with a unique name and a difficulty. The sequence order in this file determines the default order in which the exercises are fetched.
|
83
90
|
|
84
91
|
#### Exercise structure
|
85
92
|
Each exercise has the following structure:
|
86
|
-
- `HINTS.md` is an optional file containing instructions and/or hints. It is used together with the respective `description.md` for the exercise from [x-common](https://github.com/exercism/x-common) to build the `README.md` file.
|
87
93
|
- `<exercise-name>.R` usually contains an empty function declaration, as a starting point for the required solution.
|
88
94
|
- `example.R` is the source code of the sample solution.
|
89
95
|
- `test_<exercise-name>.R` is the [test suite](#test-suite).
|
96
|
+
- `HINTS.md` is an optional file containing instructions and/or hints. It is used together with the respective `description.md` for the exercise from [x-common](https://github.com/exercism/x-common) to build the `README.md` file.
|
90
97
|
|
91
98
|
### Writing an issue
|
92
99
|
To report a bug you should [create an issue](https://help.github.com/articles/creating-an-issue/) [here](https://github.com/exercism/xr/issues).
|
@@ -104,17 +111,29 @@ The example solution doesn't have to be perfect, but should pass all of the test
|
|
104
111
|
The test suite should be derived from the respective `x-common/exercises/<exercise-name>/canonical-data.json` and comply to some formatting and coding standards (to get an idea you can look at some of the existing tests).
|
105
112
|
|
106
113
|
### Running tests
|
107
|
-
To run the tests for
|
114
|
+
To run the tests for just a single exercise, run `source('test_<exercise-name>.R')` from within the exercise's directory. Note that when testing locally you'll need to replace the first line of `test_<exercise-name>.R` (which sources `<exercise-name>.R`) with `source('example.R')`. If you do this, remember to change it back before submitting any pull requests.
|
115
|
+
|
116
|
+
Alternatively, to run tests for all exercises at once, simply run `source("bin/run_tests.R")`.
|
108
117
|
|
109
118
|
The example solutions must pass the tests without failures. Additionally the tests should not run longer than a few seconds.
|
110
119
|
|
111
|
-
In order to be accepted by Travis-CI,
|
120
|
+
In order to be accepted by Travis-CI, each exercise must be registered in `config.json`.
|
112
121
|
|
113
122
|
### Style guide
|
114
|
-
|
123
|
+
There are a variety of R style guides in circulation and opinions on the topic can vary widely which does make it hard to settle on specific standards. Our preference is to have R code in this repository follow Hadley Wickham's [R style guide](http://adv-r.had.co.nz/Style.html).
|
115
124
|
|
116
125
|
You are thus encouraged to run [`lintr`](https://github.com/jimhester/lintr) on your R scripts before opening a [pull request](#writing-a-pull-request) in order to check that your code adheres to this style guide before submitting it for review.
|
117
126
|
|
127
|
+
Note however that at the moment only the following linting rules are strictly enforced:
|
128
|
+
|
129
|
+
- line length should be less than 80 characters
|
130
|
+
- objects should not be in camelCase, snake_case is preferred
|
131
|
+
- the assignment operator <- should be used
|
132
|
+
- all commas should be followed by a space (but not preceded by one)
|
133
|
+
- no absolute paths should be used
|
134
|
+
|
135
|
+
To perform these specific checks locally, run `source("bin/run_lints.R")`.
|
136
|
+
|
118
137
|
## License
|
119
138
|
|
120
139
|
The MIT License (MIT)
|
@@ -0,0 +1,30 @@
|
|
1
|
+
library(lintr)
|
2
|
+
|
3
|
+
linters <- list(
|
4
|
+
a = line_length_linter(80),
|
5
|
+
b = camel_case_linter,
|
6
|
+
c = assignment_linter,
|
7
|
+
d = commas_linter,
|
8
|
+
e = absolute_paths_linter
|
9
|
+
)
|
10
|
+
|
11
|
+
files <- list.files(path = "exercises", pattern = ".+\\.R$", recursive = TRUE, full.names = TRUE)
|
12
|
+
lints <- lintr:::flatten_lints(lapply(files, function(file) {
|
13
|
+
if (interactive()) {
|
14
|
+
message(".", appendLF = FALSE)
|
15
|
+
}
|
16
|
+
lint(file, linters, parse_settings = FALSE)
|
17
|
+
}))
|
18
|
+
if (interactive()) {
|
19
|
+
message()
|
20
|
+
}
|
21
|
+
lints <- lintr:::reorder_lints(lints)
|
22
|
+
class(lints) <- "lints"
|
23
|
+
|
24
|
+
has_lints <- length(lints) > 0
|
25
|
+
lint_output <- NULL
|
26
|
+
if (has_lints) {
|
27
|
+
lint_output <- paste(collapse = "\n", capture.output(print(lints)))
|
28
|
+
}
|
29
|
+
|
30
|
+
testthat::expect(!has_lints, paste(sep = "\n", "Not lint free", lint_output))
|
@@ -0,0 +1,35 @@
|
|
1
|
+
library(jsonlite)
|
2
|
+
library(testthat)
|
3
|
+
library(magrittr)
|
4
|
+
|
5
|
+
test_exercise <- function(exercise) {
|
6
|
+
|
7
|
+
solution_file <- paste0(exercise, ".R")
|
8
|
+
test_file <- paste0("test_", exercise, ".R")
|
9
|
+
|
10
|
+
file.copy(
|
11
|
+
file.path("..", "exercises", exercise, "example.R"),
|
12
|
+
solution_file
|
13
|
+
)
|
14
|
+
file.copy(
|
15
|
+
file.path("..", "exercises", exercise, test_file),
|
16
|
+
test_file
|
17
|
+
)
|
18
|
+
|
19
|
+
source(test_file)
|
20
|
+
rm(list = ls())
|
21
|
+
|
22
|
+
}
|
23
|
+
|
24
|
+
# create temp directory for testing purposes
|
25
|
+
temp_dir <- "temp"
|
26
|
+
dir.create(temp_dir)
|
27
|
+
setwd(temp_dir)
|
28
|
+
|
29
|
+
# read config and test all exercises
|
30
|
+
config <- fromJSON(file.path("..", "config.json"))
|
31
|
+
lapply(config$exercises$slug, test_exercise)
|
32
|
+
|
33
|
+
# clean up
|
34
|
+
setwd(dir = "../")
|
35
|
+
unlink("temp", recursive = TRUE)
|
@@ -1,18 +1,18 @@
|
|
1
|
-
anagram <- function(subject,candidates) {
|
1
|
+
anagram <- function(subject, candidates) {
|
2
2
|
# subject is a string
|
3
3
|
# candidates is a character vector
|
4
4
|
# break subject into vector of characters
|
5
5
|
subject <- tolower(subject)
|
6
6
|
test_candidates <- tolower(candidates)
|
7
|
-
l <- strsplit(subject,"")[[1]]
|
7
|
+
l <- strsplit(subject, "")[[1]]
|
8
8
|
# sub out each character from l in candidates
|
9
9
|
for (i in l) {
|
10
|
-
test_candidates <- sub(i,"",test_candidates)
|
10
|
+
test_candidates <- sub(i, "", test_candidates)
|
11
11
|
}
|
12
|
-
result <- candidates[test_candidates=="" &
|
12
|
+
result <- candidates[test_candidates == "" &
|
13
13
|
tolower(candidates) != subject &
|
14
14
|
nchar(candidates) == length(l)]
|
15
|
-
if (length(result)==0) {
|
15
|
+
if (length(result) == 0) {
|
16
16
|
return(c())
|
17
17
|
}
|
18
18
|
return(result)
|