trackler 2.1.0.42 → 2.1.0.43
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.
- checksums.yaml +4 -4
- data/bin/update +3 -3
- data/common/CONTRIBUTING.md +5 -5
- data/common/exercises/rna-transcription/canonical-data.json +9 -9
- data/lib/trackler/track.rb +40 -6
- data/lib/trackler/version.rb +1 -1
- data/tracks/clojure/config.json +7 -0
- data/tracks/clojure/exercises/rotational-cipher/project.clj +4 -0
- data/tracks/clojure/exercises/rotational-cipher/src/example.clj +21 -0
- data/tracks/clojure/exercises/rotational-cipher/test/rotational_cipher_test.clj +34 -0
- data/tracks/elm/README.md +3 -3
- data/tracks/elm/config.json +1 -1
- data/tracks/elm/exercises/accumulate/elm-package.json +1 -1
- data/tracks/elm/exercises/accumulate/package.json +1 -1
- data/tracks/elm/exercises/accumulate/tests/elm-package.json +1 -1
- data/tracks/elm/exercises/allergies/elm-package.json +1 -1
- data/tracks/elm/exercises/allergies/package.json +1 -1
- data/tracks/elm/exercises/allergies/tests/elm-package.json +1 -1
- data/tracks/elm/exercises/anagram/elm-package.json +1 -1
- data/tracks/elm/exercises/anagram/package.json +1 -1
- data/tracks/elm/exercises/anagram/tests/elm-package.json +1 -1
- data/tracks/elm/exercises/atbash-cipher/elm-package.json +1 -1
- data/tracks/elm/exercises/atbash-cipher/package.json +1 -1
- data/tracks/elm/exercises/atbash-cipher/tests/elm-package.json +1 -1
- data/tracks/elm/exercises/bob/elm-package.json +1 -1
- data/tracks/elm/exercises/bob/package.json +1 -1
- data/tracks/elm/exercises/bob/tests/elm-package.json +1 -1
- data/tracks/elm/exercises/difference-of-squares/elm-package.json +1 -1
- data/tracks/elm/exercises/difference-of-squares/package.json +1 -1
- data/tracks/elm/exercises/difference-of-squares/tests/elm-package.json +1 -1
- data/tracks/elm/exercises/gigasecond/elm-package.json +1 -1
- data/tracks/elm/exercises/gigasecond/package.json +1 -1
- data/tracks/elm/exercises/gigasecond/tests/elm-package.json +1 -1
- data/tracks/elm/exercises/grade-school/elm-package.json +1 -1
- data/tracks/elm/exercises/grade-school/package.json +1 -1
- data/tracks/elm/exercises/grade-school/tests/elm-package.json +1 -1
- data/tracks/elm/exercises/grains/elm-package.json +1 -1
- data/tracks/elm/exercises/grains/package.json +1 -1
- data/tracks/elm/exercises/grains/tests/elm-package.json +1 -1
- data/tracks/elm/exercises/hamming/elm-package.json +1 -1
- data/tracks/elm/exercises/hamming/package.json +1 -1
- data/tracks/elm/exercises/hamming/tests/elm-package.json +1 -1
- data/tracks/elm/exercises/hello-world/elm-package.json +1 -1
- data/tracks/elm/exercises/hello-world/package.json +1 -1
- data/tracks/elm/exercises/hello-world/tests/elm-package.json +1 -1
- data/tracks/elm/exercises/largest-series-product/elm-package.json +1 -1
- data/tracks/elm/exercises/largest-series-product/package.json +1 -1
- data/tracks/elm/exercises/largest-series-product/tests/elm-package.json +1 -1
- data/tracks/elm/exercises/leap/elm-package.json +1 -1
- data/tracks/elm/exercises/leap/package.json +1 -1
- data/tracks/elm/exercises/leap/tests/elm-package.json +1 -1
- data/tracks/elm/exercises/list-ops/elm-package.json +1 -1
- data/tracks/elm/exercises/list-ops/package.json +1 -1
- data/tracks/elm/exercises/list-ops/tests/elm-package.json +1 -1
- data/tracks/elm/exercises/nucleotide-count/elm-package.json +1 -1
- data/tracks/elm/exercises/nucleotide-count/package.json +1 -1
- data/tracks/elm/exercises/nucleotide-count/tests/elm-package.json +1 -1
- data/tracks/elm/exercises/pangram/elm-package.json +1 -1
- data/tracks/elm/exercises/pangram/package.json +1 -1
- data/tracks/elm/exercises/pangram/tests/elm-package.json +1 -1
- data/tracks/elm/exercises/phone-number/elm-package.json +1 -1
- data/tracks/elm/exercises/phone-number/package.json +1 -1
- data/tracks/elm/exercises/phone-number/tests/elm-package.json +1 -1
- data/tracks/elm/exercises/raindrops/elm-package.json +1 -1
- data/tracks/elm/exercises/raindrops/package.json +1 -1
- data/tracks/elm/exercises/raindrops/tests/elm-package.json +1 -1
- data/tracks/elm/exercises/rna-transcription/elm-package.json +1 -1
- data/tracks/elm/exercises/rna-transcription/package.json +1 -1
- data/tracks/elm/exercises/rna-transcription/tests/elm-package.json +1 -1
- data/tracks/elm/exercises/robot-simulator/elm-package.json +1 -1
- data/tracks/elm/exercises/robot-simulator/package.json +1 -1
- data/tracks/elm/exercises/robot-simulator/tests/elm-package.json +1 -1
- data/tracks/elm/exercises/roman-numerals/elm-package.json +1 -1
- data/tracks/elm/exercises/roman-numerals/package.json +1 -1
- data/tracks/elm/exercises/roman-numerals/tests/elm-package.json +1 -1
- data/tracks/elm/exercises/run-length-encoding/elm-package.json +1 -1
- data/tracks/elm/exercises/run-length-encoding/package.json +1 -1
- data/tracks/elm/exercises/run-length-encoding/tests/elm-package.json +1 -1
- data/tracks/elm/exercises/say/elm-package.json +1 -1
- data/tracks/elm/exercises/say/package.json +1 -1
- data/tracks/elm/exercises/say/tests/elm-package.json +1 -1
- data/tracks/elm/exercises/scrabble-score/elm-package.json +1 -1
- data/tracks/elm/exercises/scrabble-score/package.json +1 -1
- data/tracks/elm/exercises/scrabble-score/tests/elm-package.json +1 -1
- data/tracks/elm/exercises/series/elm-package.json +1 -1
- data/tracks/elm/exercises/series/package.json +1 -1
- data/tracks/elm/exercises/series/tests/elm-package.json +1 -1
- data/tracks/elm/exercises/space-age/elm-package.json +1 -1
- data/tracks/elm/exercises/space-age/package.json +1 -1
- data/tracks/elm/exercises/space-age/tests/elm-package.json +1 -1
- data/tracks/elm/exercises/strain/elm-package.json +1 -1
- data/tracks/elm/exercises/strain/package.json +1 -1
- data/tracks/elm/exercises/strain/tests/elm-package.json +1 -1
- data/tracks/elm/exercises/sublist/elm-package.json +1 -1
- data/tracks/elm/exercises/sublist/package.json +1 -1
- data/tracks/elm/exercises/sublist/tests/elm-package.json +1 -1
- data/tracks/elm/exercises/sum-of-multiples/elm-package.json +1 -1
- data/tracks/elm/exercises/sum-of-multiples/package.json +1 -1
- data/tracks/elm/exercises/sum-of-multiples/tests/elm-package.json +1 -1
- data/tracks/elm/exercises/triangle/elm-package.json +1 -1
- data/tracks/elm/exercises/triangle/package.json +1 -1
- data/tracks/elm/exercises/triangle/tests/elm-package.json +1 -1
- data/tracks/elm/exercises/word-count/elm-package.json +1 -1
- data/tracks/elm/exercises/word-count/package.json +1 -1
- data/tracks/elm/exercises/word-count/tests/elm-package.json +1 -1
- data/tracks/perl5/README.md +1 -1
- data/tracks/prolog/exercises/hello-world/hello_world_tests.plt +3 -3
- data/tracks/purescript/config.json +0 -5
- data/tracks/python/README.md +4 -4
- data/tracks/python/config.json +1 -1
- data/tracks/ruby/exercises/hamming/RUNNING_TESTS.md +56 -0
- data/tracks/ruby/exercises/hello-world/GETTING_STARTED.md +10 -33
- data/tracks/rust/config.json +1 -1
- metadata +6 -4
- data/fixtures/tracks/fake/docs/STRAY.md +0 -1
- data/lib/trackler/doc_file.rb +0 -88
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: c43137b06d69eb9c5ce58551bced2480a9ca5828
|
|
4
|
+
data.tar.gz: 5f23d77ff7e8a5ab23f3de0f7f205245e278603d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: fbe255899f20a8b2bf5692a9fe7cb91fb11b06e6dbebb44892f41bf561501749f994794872de5be3140428556b339c399a8e12c0cfd8aafa353b3d4eee06a481
|
|
7
|
+
data.tar.gz: 6f510c310c9e110afa88805be6b4273216c4c22fcfd7a7f87c426f909f9e4d86ed0020ae85a388426e10643f5d89550763f310212f113b5de8660d42143e1da8
|
data/bin/update
CHANGED
data/common/CONTRIBUTING.md
CHANGED
|
@@ -93,13 +93,13 @@ language name. For example, _C++_ has the ID `cpp`. This ID is used throughout
|
|
|
93
93
|
the Exercism ecosystem.
|
|
94
94
|
|
|
95
95
|
Each language-specific repository can be found under the Exercism GitHub
|
|
96
|
-
organization
|
|
96
|
+
organization named with the track ID.
|
|
97
97
|
|
|
98
98
|
```
|
|
99
|
-
https://github.com/exercism/
|
|
99
|
+
https://github.com/exercism/{TRACK_ID}
|
|
100
100
|
```
|
|
101
101
|
|
|
102
|
-
For example, the C++ repository is [exercism/
|
|
102
|
+
For example, the C++ repository is [exercism/cpp](https://github.com/exercism/cpp).
|
|
103
103
|
|
|
104
104
|
### Problem Metadata
|
|
105
105
|
|
|
@@ -230,7 +230,7 @@ A problem must have a unique slug. This slug is used as
|
|
|
230
230
|
* Bonus: `exercises/<slug>/canonical-data.json` with inputs/outputs for the test suite.
|
|
231
231
|
* Submit a pull request.
|
|
232
232
|
|
|
233
|
-
### In exercism
|
|
233
|
+
### In exercism/<TRACK_ID>
|
|
234
234
|
|
|
235
235
|
* Do the same as when [porting an
|
|
236
236
|
exercise](#porting-an-exercise-to-another-language-track).
|
|
@@ -263,7 +263,7 @@ Each track should have the following structure:
|
|
|
263
263
|
└── hello-world_test.file
|
|
264
264
|
```
|
|
265
265
|
|
|
266
|
-
The example template for a track can be found
|
|
266
|
+
The example template for a track can be found in the [request-new-language-track repository](https://github.com/exercism/request-new-language-track).
|
|
267
267
|
|
|
268
268
|
* `LICENSE` - The MIT License (MIT)
|
|
269
269
|
* `README.md` - a thorough explanation of how to contribute to the track.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"exercise": "rna-transcription",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"comments": [
|
|
5
5
|
"Language implementations vary on the issue of invalid input data.",
|
|
6
6
|
"A language may elect to simplify this task by only presenting valid",
|
|
@@ -15,49 +15,49 @@
|
|
|
15
15
|
],
|
|
16
16
|
"cases": [
|
|
17
17
|
{
|
|
18
|
-
"description": "
|
|
18
|
+
"description": "RNA complement of cytosine is guanine",
|
|
19
19
|
"property": "toRna",
|
|
20
20
|
"dna": "C",
|
|
21
21
|
"expected": "G"
|
|
22
22
|
},
|
|
23
23
|
{
|
|
24
|
-
"description": "
|
|
24
|
+
"description": "RNA complement of guanine is cytosine",
|
|
25
25
|
"property": "toRna",
|
|
26
26
|
"dna": "G",
|
|
27
27
|
"expected": "C"
|
|
28
28
|
},
|
|
29
29
|
{
|
|
30
|
-
"description": "
|
|
30
|
+
"description": "RNA complement of thymine is adenine",
|
|
31
31
|
"property": "toRna",
|
|
32
32
|
"dna": "T",
|
|
33
33
|
"expected": "A"
|
|
34
34
|
},
|
|
35
35
|
{
|
|
36
|
-
"description": "
|
|
36
|
+
"description": "RNA complement of adenine is uracil",
|
|
37
37
|
"property": "toRna",
|
|
38
38
|
"dna": "A",
|
|
39
39
|
"expected": "U"
|
|
40
40
|
},
|
|
41
41
|
{
|
|
42
|
-
"description": "
|
|
42
|
+
"description": "RNA complement",
|
|
43
43
|
"property": "toRna",
|
|
44
44
|
"dna": "ACGTGGTCTTAA",
|
|
45
45
|
"expected": "UGCACCAGAAUU"
|
|
46
46
|
},
|
|
47
47
|
{
|
|
48
|
-
"description": "
|
|
48
|
+
"description": "correctly handles invalid input (RNA instead of DNA)",
|
|
49
49
|
"property": "toRna",
|
|
50
50
|
"dna": "U",
|
|
51
51
|
"expected": null
|
|
52
52
|
},
|
|
53
53
|
{
|
|
54
|
-
"description": "
|
|
54
|
+
"description": "correctly handles completely invalid DNA input",
|
|
55
55
|
"property": "toRna",
|
|
56
56
|
"dna": "XXX",
|
|
57
57
|
"expected": null
|
|
58
58
|
},
|
|
59
59
|
{
|
|
60
|
-
"description": "
|
|
60
|
+
"description": "correctly handles partially invalid DNA input",
|
|
61
61
|
"property": "toRna",
|
|
62
62
|
"dna": "ACGTXXXCTTAA",
|
|
63
63
|
"expected": null
|
data/lib/trackler/track.rb
CHANGED
|
@@ -8,7 +8,7 @@ module Trackler
|
|
|
8
8
|
# Track is a collection of exercises in a given language.
|
|
9
9
|
class Track
|
|
10
10
|
TOPICS = %w(about installation tests learning resources)
|
|
11
|
-
DEFAULT_IMAGE_PATH =
|
|
11
|
+
DEFAULT_IMAGE_PATH = "/docs/img"
|
|
12
12
|
|
|
13
13
|
Image = Struct.new(:path) do
|
|
14
14
|
def exists?
|
|
@@ -100,9 +100,9 @@ module Trackler
|
|
|
100
100
|
end
|
|
101
101
|
|
|
102
102
|
def doc_format
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
103
|
+
default_format = 'md'
|
|
104
|
+
path = File.join(dir, "docs", "*.*")
|
|
105
|
+
most_popular_format(path) || default_format
|
|
106
106
|
end
|
|
107
107
|
|
|
108
108
|
def global_zip
|
|
@@ -119,11 +119,19 @@ module Trackler
|
|
|
119
119
|
end
|
|
120
120
|
|
|
121
121
|
def hints
|
|
122
|
-
|
|
122
|
+
if File.exist?(track_hints_filename)
|
|
123
|
+
File.read(track_hints_filename)
|
|
124
|
+
else
|
|
125
|
+
""
|
|
126
|
+
end
|
|
123
127
|
end
|
|
124
128
|
|
|
125
129
|
private
|
|
126
130
|
|
|
131
|
+
def track_hints_filename
|
|
132
|
+
File.join(dir, 'docs', 'EXERCISE_README_INSERT.md')
|
|
133
|
+
end
|
|
134
|
+
|
|
127
135
|
def active_slugs
|
|
128
136
|
(config["exercises"] || []).map { |ex| ex["slug"] }
|
|
129
137
|
end
|
|
@@ -136,6 +144,13 @@ module Trackler
|
|
|
136
144
|
config["deprecated"] || []
|
|
137
145
|
end
|
|
138
146
|
|
|
147
|
+
def most_popular_format(path)
|
|
148
|
+
formats = Dir.glob(path).map do |filename|
|
|
149
|
+
File.extname(filename).sub(/^\./, '')
|
|
150
|
+
end
|
|
151
|
+
formats.max_by { |format| formats.count(format) }
|
|
152
|
+
end
|
|
153
|
+
|
|
139
154
|
def config
|
|
140
155
|
@config ||= JSON.parse(File.read(config_filename))
|
|
141
156
|
end
|
|
@@ -144,16 +159,35 @@ module Trackler
|
|
|
144
159
|
File.join(dir, "config.json")
|
|
145
160
|
end
|
|
146
161
|
|
|
162
|
+
def document_contents(topic)
|
|
163
|
+
filename = document_filename(topic)
|
|
164
|
+
case filename
|
|
165
|
+
when /\.md$/
|
|
166
|
+
File.read(filename)
|
|
167
|
+
when /\.org$/
|
|
168
|
+
Orgmode::Parser.new(File.read(filename)).to_markdown
|
|
169
|
+
else
|
|
170
|
+
''
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
|
|
147
174
|
def docs_by_topic(image_path)
|
|
175
|
+
src = Regexp.new("]\\(%s" % DEFAULT_IMAGE_PATH)
|
|
176
|
+
dst = "](%s" % image_path.gsub(Regexp.new("/$"), "")
|
|
148
177
|
Hash[
|
|
149
178
|
TOPICS.zip(
|
|
150
179
|
TOPICS.map { |topic|
|
|
151
|
-
|
|
180
|
+
document_contents(topic).gsub(src, dst)
|
|
152
181
|
}
|
|
153
182
|
)
|
|
154
183
|
]
|
|
155
184
|
end
|
|
156
185
|
|
|
186
|
+
def document_filename(topic)
|
|
187
|
+
path = File.join(dir, "docs", topic.upcase)
|
|
188
|
+
Dir.glob("%s.*" % path).sort.first
|
|
189
|
+
end
|
|
190
|
+
|
|
157
191
|
def svg_icon
|
|
158
192
|
@svg_icon ||= Image.new(File.join(dir, "img/icon.svg"))
|
|
159
193
|
end
|
data/lib/trackler/version.rb
CHANGED
data/tracks/clojure/config.json
CHANGED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
(ns rotational-cipher)
|
|
2
|
+
|
|
3
|
+
(def ^:private string (partial apply str))
|
|
4
|
+
|
|
5
|
+
(def ^:private lower-case "abcdefghijklmnopqrstuvwxyz")
|
|
6
|
+
|
|
7
|
+
(def ^:private upper-case (->> lower-case (map clojure.string/upper-case) string))
|
|
8
|
+
|
|
9
|
+
(def ^:private letters (into #{} (concat lower-case upper-case)))
|
|
10
|
+
|
|
11
|
+
(defn- rotater [shift]
|
|
12
|
+
(let [encoding (->> (cycle letters)
|
|
13
|
+
(drop (* shift 2))
|
|
14
|
+
(take 52)
|
|
15
|
+
(zipmap letters))]
|
|
16
|
+
(fn [char] (get encoding char char))))
|
|
17
|
+
|
|
18
|
+
(defn rotate [message shift]
|
|
19
|
+
(->> message
|
|
20
|
+
(map (rotater shift))
|
|
21
|
+
string))
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
(ns rotational-cipher-test
|
|
2
|
+
(:require [clojure.test :refer [deftest is testing]]
|
|
3
|
+
rotational-cipher))
|
|
4
|
+
|
|
5
|
+
(deftest rotational-cipher-test
|
|
6
|
+
(testing "rotate a by 1"
|
|
7
|
+
(is (= (rotational-cipher/rotate "a" 1) "b")))
|
|
8
|
+
|
|
9
|
+
(testing "rotate a by 26, same output as input"
|
|
10
|
+
(is (= (rotational-cipher/rotate "a" 26) "a")))
|
|
11
|
+
|
|
12
|
+
(testing "rotate a by 0, same output as input"
|
|
13
|
+
(is (= (rotational-cipher/rotate "a" 0) "a")))
|
|
14
|
+
|
|
15
|
+
(testing "rotate m by 13"
|
|
16
|
+
(is (= (rotational-cipher/rotate "m" 13) "z")))
|
|
17
|
+
|
|
18
|
+
(testing "rotate n by 13 with wrap around alphabet"
|
|
19
|
+
(is (= (rotational-cipher/rotate "n" 13) "a")))
|
|
20
|
+
|
|
21
|
+
(testing "rotate capital letters"
|
|
22
|
+
(is (= (rotational-cipher/rotate "OMG" 5) "TRL")))
|
|
23
|
+
|
|
24
|
+
(testing "rotate spaces"
|
|
25
|
+
(is (= (rotational-cipher/rotate "O M G" 5) "T R L")))
|
|
26
|
+
|
|
27
|
+
(testing "rotate numbers"
|
|
28
|
+
(is (= (rotational-cipher/rotate "Testing 1 2 3 testing" 4) "Xiwxmrk 1 2 3 xiwxmrk")))
|
|
29
|
+
|
|
30
|
+
(testing "rotate punctuation"
|
|
31
|
+
(is (= (rotational-cipher/rotate "Let's eat, Grandma!" 21) "Gzo'n zvo, Bmviyhv!")))
|
|
32
|
+
|
|
33
|
+
(testing "rotate all letters"
|
|
34
|
+
(is (= (rotational-cipher/rotate "The quick brown fox jumps over the lazy dog." 13) "Gur dhvpx oebja sbk whzcf bire gur ynml qbt."))))
|
data/tracks/elm/README.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
#
|
|
2
|
-
[](https://travis-ci.org/exercism/elm)
|
|
3
3
|
|
|
4
4
|
Exercism Exercises in Elm
|
|
5
5
|
|
|
@@ -76,7 +76,7 @@ tests =
|
|
|
76
76
|
]
|
|
77
77
|
```
|
|
78
78
|
|
|
79
|
-
- All the tests for
|
|
79
|
+
- All the tests for Exercism Elm Track exercises can be run from the top level of the repo with `bin/build.sh`. Please run this command before submitting your PR.
|
|
80
80
|
|
|
81
81
|
- If you are submitting a new exercise, be sure to add it to the appropriate place in the `config.json` file. Also, please run `bin/fetch-configlet && bin/configlet` to ensure the exercise is configured correctly.
|
|
82
82
|
|
data/tracks/elm/config.json
CHANGED