trackler 2.2.1.73 → 2.2.1.74
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/problem-specifications/exercises/rna-transcription/canonical-data.json +1 -31
- data/problem-specifications/exercises/secret-handshake/metadata.yml +1 -1
- data/tracks/csharp/config.json +10 -0
- data/tracks/csharp/exercises/Exercises.sln +7 -1
- data/tracks/csharp/exercises/armstrong-numbers/ArmstrongNumbers.cs +9 -0
- data/tracks/csharp/exercises/armstrong-numbers/ArmstrongNumbers.csproj +17 -0
- data/tracks/csharp/exercises/armstrong-numbers/ArmstrongNumbersTest.cs +54 -0
- data/tracks/csharp/exercises/armstrong-numbers/Example.cs +18 -0
- data/tracks/csharp/exercises/armstrong-numbers/README.md +10 -0
- data/tracks/csharp/exercises/bob/BobTest.cs +2 -2
- data/tracks/csharp/exercises/bob/Example.cs +2 -0
- data/tracks/csharp/exercises/book-store/BookStoreTest.cs +8 -1
- data/tracks/csharp/exercises/change/README.md +1 -1
- data/tracks/csharp/exercises/rna-transcription/RnaTranscriptionTest.cs +1 -20
- data/tracks/csharp/exercises/secret-handshake/README.md +1 -1
- data/tracks/csharp/exercises/word-count/WordCountTest.cs +12 -0
- data/tracks/csharp/generators/Exercises/ArmstrongNumbers.cs +6 -0
- data/tracks/dart/config.json +4 -3
- data/tracks/dart/config/maintainers.json +3 -3
- data/tracks/delphi/exercises/armstrong-numbers/uArmstrongNumbersExample.pas +13 -10
- data/tracks/delphi/exercises/rna-transcription/uTestRnaTranscription.pas +4 -28
- data/tracks/ecmascript/config.json +5 -5
- data/tracks/fsharp/config.json +11 -0
- data/tracks/fsharp/exercises/Exercises.sln +6 -0
- data/tracks/fsharp/exercises/armstrong-numbers/ArmstrongNumbers.fs +3 -0
- data/tracks/fsharp/exercises/armstrong-numbers/ArmstrongNumbers.fsproj +23 -0
- data/tracks/fsharp/exercises/armstrong-numbers/ArmstrongNumbersTest.fs +41 -0
- data/tracks/fsharp/exercises/armstrong-numbers/Example.fs +7 -0
- data/tracks/fsharp/exercises/armstrong-numbers/Program.fs +1 -0
- data/tracks/fsharp/exercises/armstrong-numbers/README.md +15 -0
- data/tracks/fsharp/exercises/change/README.md +1 -1
- data/tracks/fsharp/exercises/secret-handshake/README.md +1 -1
- data/tracks/fsharp/generators/Common.fs +1 -0
- data/tracks/fsharp/generators/Generators.fs +7 -0
- data/tracks/go/exercises/secret-handshake/README.md +1 -1
- data/tracks/idris/.travis.yml +23 -3
- data/tracks/idris/bin/fetch-exercism-infra.sh +121 -0
- data/tracks/idris/bin/fetch-stack.sh +11 -0
- data/tracks/idris/bin/solve_exercises.sh +59 -0
- data/tracks/idris/config.json +6 -0
- data/tracks/idris/exercises/hello-world/src/HelloWorld.idr +4 -0
- data/tracks/java/exercises/reverse-string/src/main/java/ReverseString.java +1 -1
- data/tracks/javascript/.eslintignore +0 -7
- data/tracks/javascript/config.json +11 -0
- data/tracks/javascript/exercises/anagram/example.js +2 -2
- data/tracks/javascript/exercises/circular-buffer/circular-buffer.spec.js +1 -1
- data/tracks/javascript/exercises/circular-buffer/example.js +1 -1
- data/tracks/javascript/exercises/pangram/example.js +5 -4
- data/tracks/javascript/exercises/say/example.js +5 -2
- data/tracks/javascript/exercises/scrabble-score/example.js +2 -3
- data/tracks/javascript/exercises/secret-handshake/README.md +1 -1
- data/tracks/javascript/exercises/triangle/example.js +3 -2
- data/tracks/javascript/exercises/trinary/example.js +1 -1
- data/tracks/javascript/exercises/two-fer/README.md +41 -0
- data/tracks/javascript/exercises/two-fer/example.js +10 -0
- data/tracks/javascript/exercises/two-fer/two-fer.js +12 -0
- data/tracks/javascript/exercises/two-fer/two-fer.spec.js +18 -0
- data/tracks/kotlin/exercises/secret-handshake/README.md +1 -1
- data/tracks/perl6/exercises/rna-transcription/Example.pm6 +1 -2
- data/tracks/perl6/exercises/rna-transcription/RNA.pm6 +1 -1
- data/tracks/perl6/exercises/rna-transcription/example.yaml +3 -10
- data/tracks/perl6/exercises/rna-transcription/rna-transcription.t +4 -40
- data/tracks/php/exercises/hamming/hamming_test.php +2 -1
- data/tracks/python/config.json +12 -0
- data/tracks/python/exercises/armstrong-numbers/README.md +28 -0
- data/tracks/python/exercises/armstrong-numbers/armstrong_numbers.py +2 -0
- data/tracks/python/exercises/armstrong-numbers/armstrong_numbers_test.py +36 -0
- data/tracks/python/exercises/armstrong-numbers/example.py +2 -0
- data/tracks/python/exercises/protein-translation/example.py +1 -1
- data/tracks/python/exercises/protein-translation/protein_translation.py +1 -5
- data/tracks/python/exercises/protein-translation/protein_translation_test.py +30 -19
- data/tracks/ruby/exercises/secret-handshake/README.md +1 -1
- data/tracks/rust/exercises/simple-linked-list/.meta/hints.md +2 -3
- data/tracks/rust/exercises/simple-linked-list/README.md +3 -3
- data/tracks/swift/config.json +13 -0
- data/tracks/swift/exercises/protein-translation/Package.swift +5 -0
- data/tracks/swift/exercises/protein-translation/README.md +56 -0
- data/tracks/swift/exercises/protein-translation/Sources/ProteinTranslation.swift +1 -0
- data/tracks/swift/exercises/protein-translation/Sources/ProteinTranslationExample.swift +54 -0
- data/tracks/swift/exercises/protein-translation/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/protein-translation/Tests/ProteinTranslationTests/ProteinTranslationTests.swift +83 -0
- metadata +32 -2
data/tracks/idris/config.json
CHANGED
@@ -1,11 +1,9 @@
|
|
1
1
|
big-integer.js
|
2
2
|
exercises/alphametics
|
3
|
-
exercises/anagram
|
4
3
|
exercises/binary-search
|
5
4
|
exercises/binary-search-tree
|
6
5
|
exercises/bowling
|
7
6
|
exercises/bracket-push
|
8
|
-
exercises/circular-buffer
|
9
7
|
exercises/clock
|
10
8
|
exercises/custom-set
|
11
9
|
exercises/flatten-array
|
@@ -22,7 +20,6 @@ exercises/minesweeper
|
|
22
20
|
exercises/nth-prime
|
23
21
|
exercises/octal
|
24
22
|
exercises/palindrome-products
|
25
|
-
exercises/pangram
|
26
23
|
exercises/perfect-numbers
|
27
24
|
exercises/pythagorean-triplet
|
28
25
|
exercises/queen-attack
|
@@ -30,10 +27,6 @@ exercises/robot-name
|
|
30
27
|
exercises/robot-simulator
|
31
28
|
exercises/roman-numerals
|
32
29
|
exercises/saddle-points
|
33
|
-
exercises/say
|
34
|
-
exercises/scrabble-score
|
35
30
|
exercises/secret-handshake
|
36
31
|
exercises/simple-cipher
|
37
32
|
exercises/simple-linked-list
|
38
|
-
exercises/triangle
|
39
|
-
exercises/trinary
|
@@ -13,6 +13,17 @@
|
|
13
13
|
],
|
14
14
|
"uuid": "4756cfc9-7509-4783-8be7-60e3376b8256"
|
15
15
|
},
|
16
|
+
{
|
17
|
+
"core": false,
|
18
|
+
"difficulty": 1,
|
19
|
+
"slug": "two-fer",
|
20
|
+
"topics": [
|
21
|
+
"strings",
|
22
|
+
"control-flow-(conditionals)"
|
23
|
+
],
|
24
|
+
"unlocked_by": "hello-world",
|
25
|
+
"uuid": "5f3d1326-f0c5-44a6-b90a-6af3b7d455f1"
|
26
|
+
},
|
16
27
|
{
|
17
28
|
"core": true,
|
18
29
|
"difficulty": 1,
|
@@ -4,8 +4,8 @@ function Anagram(word) {
|
|
4
4
|
this.word = word;
|
5
5
|
}
|
6
6
|
|
7
|
-
Anagram.prototype.matches = function (
|
8
|
-
words = Array.isArray(
|
7
|
+
Anagram.prototype.matches = function (wordList) {
|
8
|
+
var words = Array.isArray(wordList) ? wordList : [].slice.call(arguments, 0);
|
9
9
|
|
10
10
|
return words.filter(function (candidate) {
|
11
11
|
return !sameWord(this.word, candidate) && isAnagram(this.word, candidate);
|
@@ -57,7 +57,7 @@ describe('CircularBuffer', function () {
|
|
57
57
|
xit('writes of undefined or null don\'t occupy buffer', function () {
|
58
58
|
var buffer = circularBuffer(3);
|
59
59
|
buffer.write(null);
|
60
|
-
buffer.write(undefined);
|
60
|
+
buffer.write(undefined); // eslint-disable-line no-undefined
|
61
61
|
[1, 2, 3].map(function (i) { buffer.write(i.toString()); });
|
62
62
|
expect(buffer.read()).toBe('1');
|
63
63
|
});
|
@@ -1,9 +1,10 @@
|
|
1
|
-
var notAlpha = /[^a-z]+/gi,
|
2
|
-
ALPHA_LENGTH = 26,
|
3
|
-
cleaned,
|
4
|
-
unique;
|
5
1
|
|
6
2
|
var Pangram = function (candidate) {
|
3
|
+
var notAlpha = /[^a-z]+/gi;
|
4
|
+
var ALPHA_LENGTH = 26;
|
5
|
+
var cleaned;
|
6
|
+
var unique;
|
7
|
+
|
7
8
|
unique = {};
|
8
9
|
cleaned = (candidate.replace(notAlpha, '')).toLowerCase();
|
9
10
|
cleaned.split('').forEach(function (el) {
|
@@ -41,7 +41,8 @@ var bigNumbers = {
|
|
41
41
|
};
|
42
42
|
|
43
43
|
function bigPart(number) {
|
44
|
-
var factor
|
44
|
+
var factor;
|
45
|
+
var result = '';
|
45
46
|
for (var bigNumber = 1000000000; bigNumber >= 1000; bigNumber /= 1000) {
|
46
47
|
if (number.current >= bigNumber) {
|
47
48
|
factor = Math.floor(number.current / bigNumber);
|
@@ -58,6 +59,7 @@ function sayDecade(n) {
|
|
58
59
|
return decades[decade] + '-' + smallNumbers[n - decade];
|
59
60
|
}
|
60
61
|
}
|
62
|
+
throw new Error('Number must be between 10 and 99.');
|
61
63
|
}
|
62
64
|
|
63
65
|
function twoDigit(n) {
|
@@ -78,7 +80,8 @@ function threeDigit(n) {
|
|
78
80
|
}
|
79
81
|
|
80
82
|
exports.inEnglish = function (n) {
|
81
|
-
var result
|
83
|
+
var result;
|
84
|
+
var number = {current: n};
|
82
85
|
if (n >= 0 && n < 1000000000000) {
|
83
86
|
result = bigPart(number);
|
84
87
|
result += threeDigit(number.current);
|
@@ -14,9 +14,8 @@ function letterScore(letter) {
|
|
14
14
|
return letterScores[letter] || 0;
|
15
15
|
}
|
16
16
|
|
17
|
-
module.exports = function (
|
18
|
-
word
|
19
|
-
word = word.toLowerCase();
|
17
|
+
module.exports = function (wrd) {
|
18
|
+
var word = wrd ? wrd.toLowerCase() : '';
|
20
19
|
|
21
20
|
var sum = 0;
|
22
21
|
var idx = -1;
|
@@ -53,7 +53,7 @@ changing `xit` to `it`.
|
|
53
53
|
|
54
54
|
## Source
|
55
55
|
|
56
|
-
Bert, in Mary Poppins [http://www.imdb.com/
|
56
|
+
Bert, in Mary Poppins [http://www.imdb.com/title/tt0058331/quotes/qt0437047](http://www.imdb.com/title/tt0058331/quotes/qt0437047)
|
57
57
|
|
58
58
|
## Submitting Incomplete Solutions
|
59
59
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
@@ -22,7 +22,6 @@ function Triangle(a, b, c) {
|
|
22
22
|
};
|
23
23
|
|
24
24
|
this.violatesInequality = function () {
|
25
|
-
var a = this.sides[0], b = this.sides[1], c = this.sides[2];
|
26
25
|
return (a + b < c) || (a + c < b) || (b + c < a);
|
27
26
|
};
|
28
27
|
|
@@ -50,7 +49,9 @@ function Triangle(a, b, c) {
|
|
50
49
|
var uniqueSides = [];
|
51
50
|
|
52
51
|
for (var uniqueSide in uniques) {
|
53
|
-
|
52
|
+
if (uniques.hasOwnProperty(uniqueSide)) {
|
53
|
+
uniqueSides.push(uniqueSide);
|
54
|
+
}
|
54
55
|
}
|
55
56
|
|
56
57
|
return uniqueSides;
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# Two Fer
|
2
|
+
|
3
|
+
`Two-fer` or `2-fer` is short for two for one. One for you and one for me.
|
4
|
+
|
5
|
+
```
|
6
|
+
"One for X, one for me."
|
7
|
+
```
|
8
|
+
|
9
|
+
When X is a name or "you".
|
10
|
+
|
11
|
+
If the given name is "Alice", the result should be "One for Alice, one for me."
|
12
|
+
If no name is given, the result should be "One for you, one for me."
|
13
|
+
|
14
|
+
## Setup
|
15
|
+
|
16
|
+
Go through the setup instructions for JavaScript to
|
17
|
+
install the necessary dependencies:
|
18
|
+
|
19
|
+
http://exercism.io/languages/javascript
|
20
|
+
|
21
|
+
## Making the Test Suite Pass
|
22
|
+
|
23
|
+
Execute the tests with:
|
24
|
+
|
25
|
+
jasmine <exercise-name>.spec.js
|
26
|
+
|
27
|
+
Replace `<exercise-name>` with the name of the current exercise. E.g., to
|
28
|
+
test the Two Fer exercise:
|
29
|
+
|
30
|
+
jasmine two-fer.spec.js
|
31
|
+
|
32
|
+
All tests but the first have been skipped. Once you get a test passing,
|
33
|
+
you can unskip the next one by changing `xit` to `it`.
|
34
|
+
|
35
|
+
## Source
|
36
|
+
|
37
|
+
This is an exercise to introduce users to basic programming constructs, just after 'Hello World'. [https://en.wikipedia.org/wiki/Two-fer](https://en.wikipedia.org/wiki/Two-fer)
|
38
|
+
|
39
|
+
## Submitting Incomplete Solutions
|
40
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
41
|
+
|
@@ -0,0 +1,12 @@
|
|
1
|
+
var TwoFer = function () {};
|
2
|
+
|
3
|
+
TwoFer.prototype.twoFer = function (who) {
|
4
|
+
// your code goes here
|
5
|
+
// You will have to use the parameter who
|
6
|
+
// in some way. In this example, it is just
|
7
|
+
// returned, but your solution will have to
|
8
|
+
// use a conditional.
|
9
|
+
return who;
|
10
|
+
};
|
11
|
+
|
12
|
+
module.exports = TwoFer;
|
@@ -0,0 +1,18 @@
|
|
1
|
+
|
2
|
+
var TwoFer = require('./two-fer');
|
3
|
+
|
4
|
+
describe('Two Fer', function () {
|
5
|
+
var twoFer = new TwoFer();
|
6
|
+
|
7
|
+
it('gives one to you if no parameter given', function () {
|
8
|
+
expect(twoFer.twoFer()).toEqual('One for you, one for me.');
|
9
|
+
});
|
10
|
+
|
11
|
+
xit('gives one to Alice if \'Alice\' is given', function () {
|
12
|
+
expect(twoFer.twoFer('Alice')).toEqual('One for Alice, one for me.');
|
13
|
+
});
|
14
|
+
|
15
|
+
xit('gives one to Bob if \'Bob\' is given', function () {
|
16
|
+
expect(twoFer.twoFer('Bob')).toEqual('One for Bob, one for me.');
|
17
|
+
});
|
18
|
+
});
|
@@ -32,7 +32,7 @@ has caused the array to be reversed.
|
|
32
32
|
|
33
33
|
## Source
|
34
34
|
|
35
|
-
Bert, in Mary Poppins [http://www.imdb.com/
|
35
|
+
Bert, in Mary Poppins [http://www.imdb.com/title/tt0058331/quotes/qt0437047](http://www.imdb.com/title/tt0058331/quotes/qt0437047)
|
36
36
|
|
37
37
|
## Submitting Incomplete Solutions
|
38
38
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
@@ -1,20 +1,13 @@
|
|
1
1
|
exercise: RNA
|
2
|
-
version:
|
3
|
-
plan:
|
2
|
+
version: 2
|
3
|
+
plan: 7
|
4
4
|
imports: '&to-rna'
|
5
5
|
tests: |-
|
6
|
-
for
|
7
|
-
if .<expected> {
|
8
|
-
is .<dna>.&to-rna, |.<expected description>;
|
9
|
-
} else {
|
10
|
-
throws-like {.<dna>.&to-rna}, Exception;
|
11
|
-
}
|
12
|
-
}
|
6
|
+
is .<dna>.&to-rna, |.<expected description> for $c-data<cases>.values;
|
13
7
|
|
14
8
|
unit: module
|
15
9
|
example: |-
|
16
10
|
sub to-rna ($dna) is export {
|
17
|
-
fail if $dna ~~ /<-[AGCT]>/;
|
18
11
|
$dna.trans(<A G C T> => <U C G A>);
|
19
12
|
}
|
20
13
|
stub: |-
|
@@ -5,9 +5,9 @@ use lib my $dir = $?FILE.IO.dirname;
|
|
5
5
|
use JSON::Fast;
|
6
6
|
|
7
7
|
my Str:D $exercise := 'RNA';
|
8
|
-
my Version:D $version =
|
8
|
+
my Version:D $version = v2;
|
9
9
|
my Str $module //= $exercise;
|
10
|
-
plan
|
10
|
+
plan 7;
|
11
11
|
|
12
12
|
use-ok $module or bail-out;
|
13
13
|
require ::($module);
|
@@ -22,32 +22,14 @@ if ::($exercise).^ver !~~ $version {
|
|
22
22
|
require ::($module) <&to-rna>;
|
23
23
|
|
24
24
|
my $c-data = from-json $=pod.pop.contents;
|
25
|
-
for
|
26
|
-
if .<expected> {
|
27
|
-
is .<dna>.&to-rna, |.<expected description>;
|
28
|
-
} else {
|
29
|
-
throws-like {.<dna>.&to-rna}, Exception;
|
30
|
-
}
|
31
|
-
}
|
25
|
+
is .<dna>.&to-rna, |.<expected description> for $c-data<cases>.values;
|
32
26
|
|
33
27
|
=head2 Canonical Data
|
34
28
|
=begin code
|
35
29
|
|
36
30
|
{
|
37
31
|
"exercise": "rna-transcription",
|
38
|
-
"version": "1.0
|
39
|
-
"comments": [
|
40
|
-
"Language implementations vary on the issue of invalid input data.",
|
41
|
-
"A language may elect to simplify this task by only presenting valid",
|
42
|
-
"test cases. For languages handling invalid input data as",
|
43
|
-
"error conditions, invalid test cases are included here and are",
|
44
|
-
"indicated with an expected value of null. Note however that null is",
|
45
|
-
"simply an indication here in the JSON. Actually returning null from",
|
46
|
-
"a rna-transcription function may or may not be idiomatic in a language.",
|
47
|
-
"Language idioms of errors or exceptions should be followed.",
|
48
|
-
"Alternative interpretations such as ignoring excess length at the end",
|
49
|
-
"are not represented here."
|
50
|
-
],
|
32
|
+
"version": "1.1.0",
|
51
33
|
"cases": [
|
52
34
|
{
|
53
35
|
"description": "RNA complement of cytosine is guanine",
|
@@ -78,24 +60,6 @@ for @($c-data<cases>) {
|
|
78
60
|
"property": "toRna",
|
79
61
|
"dna": "ACGTGGTCTTAA",
|
80
62
|
"expected": "UGCACCAGAAUU"
|
81
|
-
},
|
82
|
-
{
|
83
|
-
"description": "correctly handles invalid input (RNA instead of DNA)",
|
84
|
-
"property": "toRna",
|
85
|
-
"dna": "U",
|
86
|
-
"expected": null
|
87
|
-
},
|
88
|
-
{
|
89
|
-
"description": "correctly handles completely invalid DNA input",
|
90
|
-
"property": "toRna",
|
91
|
-
"dna": "XXX",
|
92
|
-
"expected": null
|
93
|
-
},
|
94
|
-
{
|
95
|
-
"description": "correctly handles partially invalid DNA input",
|
96
|
-
"property": "toRna",
|
97
|
-
"dna": "ACGTXXXCTTAA",
|
98
|
-
"expected": null
|
99
63
|
}
|
100
64
|
]
|
101
65
|
}
|
@@ -49,7 +49,8 @@ class HammingComparatorTest extends PHPUnit\Framework\TestCase
|
|
49
49
|
public function testExceptionThrownWhenStrandsAreDifferentLength()
|
50
50
|
{
|
51
51
|
$this->markTestSkipped();
|
52
|
-
$this->expectException('InvalidArgumentException'
|
52
|
+
$this->expectException('InvalidArgumentException');
|
53
|
+
$this->expectExceptionMessage('DNA strands must be of equal length.');
|
53
54
|
distance('GGACG', 'AGGACGTGG');
|
54
55
|
}
|
55
56
|
}
|
data/tracks/python/config.json
CHANGED
@@ -150,6 +150,18 @@
|
|
150
150
|
"pattern_recognition"
|
151
151
|
]
|
152
152
|
},
|
153
|
+
{
|
154
|
+
"uuid": "e9b0defc-dac5-11e7-9296-cec278b6b50a",
|
155
|
+
"slug": "armstrong-numbers",
|
156
|
+
"core": false,
|
157
|
+
"unlocked_by": null,
|
158
|
+
"difficulty": 1,
|
159
|
+
"topics": [
|
160
|
+
"mathematics",
|
161
|
+
"algorithms",
|
162
|
+
"loops"
|
163
|
+
]
|
164
|
+
},
|
153
165
|
{
|
154
166
|
"uuid": "4c408aab-80b9-475d-9c06-b01cd0fcd08f",
|
155
167
|
"slug": "rotational-cipher",
|