trackler 2.0.8.46 → 2.0.8.47
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/ecmascript/.travis.yml +1 -1
- data/tracks/ecmascript/README.md +9 -4
- data/tracks/ecmascript/exercises/accumulate/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/accumulate/package.json +7 -2
- data/tracks/ecmascript/exercises/acronym/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/acronym/package.json +7 -2
- data/tracks/ecmascript/exercises/all-your-base/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/all-your-base/package.json +7 -2
- data/tracks/ecmascript/exercises/allergies/allergies.spec.js +1 -1
- data/tracks/ecmascript/exercises/allergies/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/allergies/package.json +7 -2
- data/tracks/ecmascript/exercises/anagram/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/anagram/package.json +7 -2
- data/tracks/ecmascript/exercises/atbash-cipher/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/atbash-cipher/package.json +7 -2
- data/tracks/ecmascript/exercises/beer-song/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/beer-song/package.json +7 -2
- data/tracks/ecmascript/exercises/binary-search-tree/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/binary-search-tree/package.json +7 -2
- data/tracks/ecmascript/exercises/binary-search/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/binary-search/package.json +7 -2
- data/tracks/ecmascript/exercises/binary/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/binary/package.json +7 -2
- data/tracks/ecmascript/exercises/bob/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/bob/package.json +7 -2
- data/tracks/ecmascript/exercises/bracket-push/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/bracket-push/package.json +7 -2
- data/tracks/ecmascript/exercises/circular-buffer/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/circular-buffer/package.json +7 -2
- data/tracks/ecmascript/exercises/clock/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/clock/package.json +7 -2
- data/tracks/ecmascript/exercises/crypto-square/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/crypto-square/package.json +7 -2
- data/tracks/ecmascript/exercises/custom-set/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/custom-set/package.json +7 -2
- data/tracks/ecmascript/exercises/diamond/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/diamond/package.json +7 -2
- data/tracks/ecmascript/exercises/difference-of-squares/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/difference-of-squares/package.json +7 -2
- data/tracks/ecmascript/exercises/etl/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/etl/package.json +7 -2
- data/tracks/ecmascript/exercises/food-chain/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/food-chain/package.json +7 -2
- data/tracks/ecmascript/exercises/gigasecond/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/gigasecond/package.json +7 -2
- data/tracks/ecmascript/exercises/grade-school/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/grade-school/package.json +7 -2
- data/tracks/ecmascript/exercises/grains/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/grains/package.json +7 -2
- data/tracks/ecmascript/exercises/gulpfile.js +89 -0
- data/tracks/ecmascript/exercises/hamming/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/hamming/package.json +7 -2
- data/tracks/ecmascript/exercises/hello-world/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/hello-world/package.json +7 -2
- data/tracks/ecmascript/exercises/hexadecimal/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/hexadecimal/package.json +7 -2
- data/tracks/ecmascript/exercises/isogram/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/isogram/package.json +7 -2
- data/tracks/ecmascript/exercises/kindergarten-garden/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/kindergarten-garden/package.json +7 -2
- data/tracks/ecmascript/exercises/largest-series-product/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/largest-series-product/package.json +7 -2
- data/tracks/ecmascript/exercises/leap/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/leap/package.json +7 -2
- data/tracks/ecmascript/exercises/linked-list/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/linked-list/package.json +7 -2
- data/tracks/ecmascript/exercises/luhn/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/luhn/package.json +7 -2
- data/tracks/ecmascript/exercises/matrix/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/matrix/package.json +7 -2
- data/tracks/ecmascript/exercises/meetup/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/meetup/package.json +7 -2
- data/tracks/ecmascript/exercises/nth-prime/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/nth-prime/package.json +7 -2
- data/tracks/ecmascript/exercises/ocr-numbers/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/ocr-numbers/package.json +7 -2
- data/tracks/ecmascript/exercises/octal/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/octal/package.json +7 -2
- data/tracks/ecmascript/exercises/package.json +28 -0
- data/tracks/ecmascript/exercises/palindrome-products/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/palindrome-products/package.json +7 -2
- data/tracks/ecmascript/exercises/pangram/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/pangram/package.json +7 -2
- data/tracks/ecmascript/exercises/pascals-triangle/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/pascals-triangle/package.json +7 -2
- data/tracks/ecmascript/exercises/perfect-numbers/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/perfect-numbers/package.json +7 -2
- data/tracks/ecmascript/exercises/phone-number/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/phone-number/package.json +7 -2
- data/tracks/ecmascript/exercises/pig-latin/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/pig-latin/package.json +7 -2
- data/tracks/ecmascript/exercises/prime-factors/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/prime-factors/package.json +7 -2
- data/tracks/ecmascript/exercises/pythagorean-triplet/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/pythagorean-triplet/package.json +7 -2
- data/tracks/ecmascript/exercises/queen-attack/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/queen-attack/package.json +7 -2
- data/tracks/ecmascript/exercises/raindrops/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/raindrops/package.json +7 -2
- data/tracks/ecmascript/exercises/rna-transcription/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/rna-transcription/package.json +7 -2
- data/tracks/ecmascript/exercises/robot-name/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/robot-name/package.json +7 -2
- data/tracks/ecmascript/exercises/robot-simulator/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/robot-simulator/package.json +7 -2
- data/tracks/ecmascript/exercises/roman-numerals/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/roman-numerals/package.json +7 -2
- data/tracks/ecmascript/exercises/saddle-points/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/saddle-points/package.json +7 -2
- data/tracks/ecmascript/exercises/say/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/say/package.json +7 -2
- data/tracks/ecmascript/exercises/scrabble-score/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/scrabble-score/package.json +7 -2
- data/tracks/ecmascript/exercises/secret-handshake/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/secret-handshake/package.json +7 -2
- data/tracks/ecmascript/exercises/series/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/series/package.json +7 -2
- data/tracks/ecmascript/exercises/sieve/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/sieve/package.json +7 -2
- data/tracks/ecmascript/exercises/simple-cipher/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/simple-cipher/package.json +7 -2
- data/tracks/ecmascript/exercises/space-age/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/space-age/package.json +7 -2
- data/tracks/ecmascript/exercises/strain/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/strain/package.json +7 -2
- data/tracks/ecmascript/exercises/sum-of-multiples/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/sum-of-multiples/package.json +7 -2
- data/tracks/ecmascript/exercises/triangle/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/triangle/package.json +7 -2
- data/tracks/ecmascript/exercises/triangle/triangle.spec.js +1 -1
- data/tracks/ecmascript/exercises/trinary/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/trinary/package.json +7 -2
- data/tracks/ecmascript/exercises/two-bucket/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/two-bucket/package.json +7 -2
- data/tracks/ecmascript/exercises/word-count/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/word-count/package.json +7 -2
- data/tracks/ecmascript/exercises/wordy/gulpfile.js +41 -38
- data/tracks/ecmascript/exercises/wordy/package.json +7 -2
- data/tracks/ecmascript/gulpfile.js +41 -38
- data/tracks/ecmascript/package.json +7 -2
- data/tracks/julia/exercises/difference-of-squares/difference-of-squares.jl +4 -4
- data/tracks/lfe/docs/INSTALLATION.md +10 -2
- data/tracks/objective-c/config.json +9 -0
- data/tracks/objective-c/exercises/pascals-triangle/PascalsTriangleExample.h +9 -0
- data/tracks/objective-c/exercises/pascals-triangle/PascalsTriangleExample.m +54 -0
- data/tracks/objective-c/exercises/pascals-triangle/PascalsTriangleTest.m +53 -0
- data/tracks/objective-c/xcodeProject/ObjectiveC.xcodeproj/project.pbxproj +18 -0
- data/tracks/python/exercises/grains/example.py +13 -2
- data/tracks/python/exercises/grains/grains_test.py +22 -1
- data/tracks/swift/.travis.yml +9 -2
- data/tracks/swift/exercises/binary-search-tree/Sources/BinarySearchTreeExample.swift +1 -1
- data/tracks/swift/exercises/minesweeper/Sources/MinesweeperExample.swift +4 -0
- data/tracks/swift/exercises/robot-name/Tests/RobotNameTests/RobotNameTests.swift +5 -1
- metadata +7 -2
@@ -9,10 +9,15 @@
|
|
9
9
|
"url": "https://github.com/exercism/xecmascript"
|
10
10
|
},
|
11
11
|
"devDependencies": {
|
12
|
-
"babel": "
|
12
|
+
"babel-cli": "^6.24.1",
|
13
|
+
"babel-core": "^6.24.1",
|
14
|
+
"babel-plugin-transform-object-rest-spread": "^6.23.0",
|
15
|
+
"babel-polyfill": "^6.23.0",
|
16
|
+
"babel-preset-env": "^1.3.3",
|
17
|
+
"babel-preset-es2015": "^6.24.1",
|
13
18
|
"del": "~2.0.2",
|
14
19
|
"gulp": "~3.9.0",
|
15
|
-
"gulp-babel": "
|
20
|
+
"gulp-babel": "^6.1.2",
|
16
21
|
"gulp-eslint": "^1.1.0",
|
17
22
|
"gulp-jasmine": "~2.4.2",
|
18
23
|
"yargs": "~3.27.0"
|
@@ -16,65 +16,68 @@ const gulp = require('gulp'),
|
|
16
16
|
eslint = require('gulp-eslint'),
|
17
17
|
jasmine = require('gulp-jasmine'),
|
18
18
|
babel = require('gulp-babel'),
|
19
|
-
polyfill = require('babel
|
19
|
+
polyfill = require('babel-polyfill'),
|
20
20
|
del = require('del'),
|
21
|
-
argv
|
21
|
+
argv = require('yargs').argv,
|
22
22
|
inputDir = getInputDirectory(argv),
|
23
23
|
outputDir = getOutputDirectory(argv);
|
24
24
|
|
25
25
|
// Gulp tasks definition
|
26
26
|
|
27
|
-
gulp.task('default', [
|
27
|
+
gulp.task('default', ['test']);
|
28
28
|
|
29
|
-
gulp.task('test', [
|
30
|
-
return gulp.src([
|
29
|
+
gulp.task('test', ['babel'], function () {
|
30
|
+
return gulp.src([outputDir + '/*.spec.js'])
|
31
31
|
.pipe(jasmine());
|
32
32
|
});
|
33
33
|
|
34
34
|
gulp.task('babel', function () {
|
35
|
-
return gulp.src([
|
36
|
-
.pipe(babel(
|
35
|
+
return gulp.src([inputDir + '/*.js', inputDir + '/lib/*.js'])
|
36
|
+
.pipe(babel({
|
37
|
+
plugins: ["babel-plugin-transform-object-rest-spread"].map(require.resolve),
|
38
|
+
presets: ['babel-preset-env'].map(require.resolve)
|
39
|
+
}))
|
37
40
|
.pipe(gulp.dest(outputDir));
|
38
41
|
});
|
39
42
|
|
40
43
|
gulp.task('lint', function () {
|
41
|
-
return gulp.src([
|
44
|
+
return gulp.src([inputDir + '/*.js'])
|
42
45
|
.pipe(eslint({
|
43
|
-
envs:
|
46
|
+
envs: [
|
44
47
|
'es6' //turns on all es6 features except modules
|
45
48
|
],
|
46
|
-
rules:
|
49
|
+
rules: {
|
47
50
|
// full documentation here : http://eslint.org/docs/rules
|
48
51
|
|
49
52
|
// Possible errors
|
50
|
-
'comma-dangle':
|
51
|
-
'no-cond-assign':
|
52
|
-
'no-console':
|
53
|
-
'no-constant-condition':
|
54
|
-
'no-control-regex':
|
55
|
-
'no-debugger':
|
56
|
-
'no-dupe-args':
|
57
|
-
'no-dupe-keys':
|
58
|
-
'no-duplicate-case':
|
53
|
+
'comma-dangle': [2, 'never'], // don't let a comma at the end of object properties or array element
|
54
|
+
'no-cond-assign': [2, 'always'], // no assignments in conditional statements
|
55
|
+
'no-console': 2, // no console.log() statements in production code
|
56
|
+
'no-constant-condition': 2, // no constants in conditional statements
|
57
|
+
'no-control-regex': 2, // no control characters in regex's
|
58
|
+
'no-debugger': 2, // no debugger in productin code
|
59
|
+
'no-dupe-args': 2, // no duplicated arguments in functions
|
60
|
+
'no-dupe-keys': 2, // no duplicated keys when creating object literals
|
61
|
+
'no-duplicate-case': 2, // no duplicated `case` in `switch` statements
|
59
62
|
'no-empty-character-class': 2, // disallow the use of empty character classes in regular expressions
|
60
|
-
'no-empty':
|
61
|
-
'no-ex-assign':
|
62
|
-
'no-extra-boolean-cast':
|
63
|
-
'no-extra-parens':
|
64
|
-
'no-extra-semi':
|
65
|
-
'no-func-assign':
|
66
|
-
'no-inner-declarations':
|
67
|
-
'no-invalid-regexp':
|
68
|
-
'no-irregular-whitespace':
|
69
|
-
'no-negated-in-lhs':
|
70
|
-
'no-obj-calls':
|
71
|
-
'no-regex-spaces':
|
72
|
-
'no-sparse-arrays':
|
73
|
-
'no-unexpected-multiline':
|
74
|
-
'no-unreachable':
|
75
|
-
'use-isnan':
|
76
|
-
'valid-jsdoc':
|
77
|
-
'valid-typeof':
|
63
|
+
'no-empty': 2, // no empty blocks
|
64
|
+
'no-ex-assign': 2, // do not assign any value to an Exception raised
|
65
|
+
'no-extra-boolean-cast': 2, // do not use !!falseExpression to cast to boolean
|
66
|
+
'no-extra-parens': 2, // do not use extra parenthesis
|
67
|
+
'no-extra-semi': 2, // do not use extra semicolons
|
68
|
+
'no-func-assign': 2, // do not overwrite variables declared as functions
|
69
|
+
'no-inner-declarations': [2, 'both'], // only declare var's and funct's on function scope
|
70
|
+
'no-invalid-regexp': 2, // validates string arguments passed to RegExp constructor
|
71
|
+
'no-irregular-whitespace': 2, // detects special characters used as spaces
|
72
|
+
'no-negated-in-lhs': 2, // do not use negation in the left operand in an `in` expression
|
73
|
+
'no-obj-calls': 2, // prevent calling global objects as if they were functions
|
74
|
+
'no-regex-spaces': 2, // do not use multiple spaces in regex's
|
75
|
+
'no-sparse-arrays': 2, // do not use sparse arrays (empty elements)
|
76
|
+
'no-unexpected-multiline': 2, // Avoid code that looks like two expressions but is actually one
|
77
|
+
'no-unreachable': 2, // detects unreachable statements (after return, throw,...)
|
78
|
+
'use-isnan': 2, // do not compare with `NaN` value, use isNan() instead
|
79
|
+
'valid-jsdoc': 2, // ensure JSDoc comments are valid
|
80
|
+
'valid-typeof': 2 // ensure that the results of typeof are compared against a valid string
|
78
81
|
},
|
79
82
|
ecmaFeatures: {
|
80
83
|
'modules': true //this gives us modules :)
|
@@ -85,5 +88,5 @@ gulp.task('lint', function () {
|
|
85
88
|
});
|
86
89
|
|
87
90
|
gulp.task('clean', function (cb) {
|
88
|
-
del([
|
91
|
+
del([outputDir], cb);
|
89
92
|
});
|
@@ -9,10 +9,15 @@
|
|
9
9
|
"url": "https://github.com/exercism/xecmascript"
|
10
10
|
},
|
11
11
|
"devDependencies": {
|
12
|
-
"babel": "
|
12
|
+
"babel-cli": "^6.24.1",
|
13
|
+
"babel-core": "^6.24.1",
|
14
|
+
"babel-plugin-transform-object-rest-spread": "^6.23.0",
|
15
|
+
"babel-polyfill": "^6.23.0",
|
16
|
+
"babel-preset-env": "^1.3.3",
|
17
|
+
"babel-preset-es2015": "^6.24.1",
|
13
18
|
"del": "~2.0.2",
|
14
19
|
"gulp": "~3.9.0",
|
15
|
-
"gulp-babel": "
|
20
|
+
"gulp-babel": "^6.1.2",
|
16
21
|
"gulp-eslint": "^1.1.0",
|
17
22
|
"gulp-jasmine": "~2.4.2",
|
18
23
|
"yargs": "~3.27.0"
|
@@ -1,10 +1,10 @@
|
|
1
|
-
"
|
2
|
-
function
|
1
|
+
"Sum the squares of the numbers up to the given number"
|
2
|
+
function square_of_sum(n::Int)
|
3
3
|
|
4
4
|
end
|
5
5
|
|
6
|
-
"
|
7
|
-
function
|
6
|
+
"Square the sum of the numbers up to the given number"
|
7
|
+
function sum_of_squares(n::Int)
|
8
8
|
|
9
9
|
end
|
10
10
|
|
@@ -17,8 +17,16 @@ $ brew install lfe
|
|
17
17
|
```
|
18
18
|
|
19
19
|
### Installing from Source
|
20
|
-
|
21
|
-
and Erlang's `erl
|
20
|
+
Install your system's "developer tools" or "essential build packages", `git`
|
21
|
+
and Erlang's `erl`.
|
22
|
+
|
23
|
+
For example, on Ubuntu 14.04:
|
24
|
+
|
25
|
+
```bash
|
26
|
+
$ sudo apt-get install build-essentials git erlang erlang-base-hipe
|
27
|
+
```.
|
28
|
+
|
29
|
+
Afterwards you can download and build LFE with the following:
|
22
30
|
|
23
31
|
```bash
|
24
32
|
$ git clone https://github.com/rvirding/lfe
|
@@ -0,0 +1,54 @@
|
|
1
|
+
#import "PascalsTriangleExample.h"
|
2
|
+
|
3
|
+
@implementation PascalsTriangle
|
4
|
+
|
5
|
+
- (instancetype)initWithNumberOfRows:(int)numberOfRows {
|
6
|
+
self = [super init];
|
7
|
+
|
8
|
+
if (self) {
|
9
|
+
self.rows = [PascalsTriangle triangleForNumberOfRows:numberOfRows];
|
10
|
+
}
|
11
|
+
|
12
|
+
return self;
|
13
|
+
}
|
14
|
+
|
15
|
+
+ (NSMutableArray<NSArray<NSNumber *> *> *)triangleForNumberOfRows:(int)numberOfRows {
|
16
|
+
NSMutableArray<NSArray<NSNumber *> *> *triangle = [[NSMutableArray alloc] init];
|
17
|
+
|
18
|
+
for (int i = 0; i < numberOfRows; i++) {
|
19
|
+
NSMutableArray *values = [[NSMutableArray alloc] init];
|
20
|
+
|
21
|
+
if (i == 0) {
|
22
|
+
[values addObject:@1];
|
23
|
+
} else {
|
24
|
+
NSArray<NSNumber *> *lastRow = triangle[i - 1];
|
25
|
+
NSUInteger length = lastRow.count;
|
26
|
+
|
27
|
+
for (int j = 0; j <= length; j++) {
|
28
|
+
int left;
|
29
|
+
|
30
|
+
if (j == 0) {
|
31
|
+
left = 0;
|
32
|
+
} else {
|
33
|
+
left = [lastRow[j - 1] intValue];
|
34
|
+
}
|
35
|
+
|
36
|
+
int right;
|
37
|
+
|
38
|
+
if (j < length) {
|
39
|
+
right = [lastRow[j] intValue];
|
40
|
+
} else {
|
41
|
+
right = 0;
|
42
|
+
}
|
43
|
+
|
44
|
+
[values addObject:@(left + right)];
|
45
|
+
}
|
46
|
+
}
|
47
|
+
|
48
|
+
[triangle addObject:values];
|
49
|
+
}
|
50
|
+
|
51
|
+
return triangle;
|
52
|
+
}
|
53
|
+
|
54
|
+
@end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
#import <XCTest/XCTest.h>
|
2
|
+
|
3
|
+
#if __has_include("PascalsTriangleExample.h")
|
4
|
+
# import "PascalsTriangleExample.h"
|
5
|
+
# else
|
6
|
+
# import "PascalsTriangle.h"
|
7
|
+
#endif
|
8
|
+
|
9
|
+
@interface PascalsTriangleTest : XCTestCase
|
10
|
+
|
11
|
+
@end
|
12
|
+
|
13
|
+
@implementation PascalsTriangleTest
|
14
|
+
|
15
|
+
- (void)testOneRow {
|
16
|
+
PascalsTriangle *triangle = [[PascalsTriangle alloc] initWithNumberOfRows:1];
|
17
|
+
XCTAssertEqualObjects(@[@[@1]], triangle.rows);
|
18
|
+
}
|
19
|
+
|
20
|
+
- (void)testTwoRows {
|
21
|
+
PascalsTriangle *triangle = [[PascalsTriangle alloc] initWithNumberOfRows:2];
|
22
|
+
NSArray *expected = @[@[@1], @[@1, @1]];
|
23
|
+
XCTAssertEqualObjects(expected, triangle.rows);
|
24
|
+
}
|
25
|
+
|
26
|
+
- (void)testThreeRows {
|
27
|
+
PascalsTriangle *triangle = [[PascalsTriangle alloc] initWithNumberOfRows:3];
|
28
|
+
NSArray *expected = @[@[@1], @[@1, @1], @[@1, @2, @1]];
|
29
|
+
XCTAssertEqualObjects(expected, triangle.rows);
|
30
|
+
}
|
31
|
+
|
32
|
+
- (void)testFourthRow {
|
33
|
+
PascalsTriangle *triangle = [[PascalsTriangle alloc] initWithNumberOfRows:4];
|
34
|
+
NSArray *expected = @[@1, @3, @3, @1];
|
35
|
+
XCTAssertEqualObjects(expected, [triangle.rows lastObject]);
|
36
|
+
}
|
37
|
+
|
38
|
+
- (void)testFifthRow {
|
39
|
+
PascalsTriangle *triangle = [[PascalsTriangle alloc] initWithNumberOfRows:5];
|
40
|
+
NSArray *expected = @[@1, @4, @6, @4, @1];
|
41
|
+
XCTAssertEqualObjects(expected, [triangle.rows lastObject]);
|
42
|
+
}
|
43
|
+
|
44
|
+
- (void)testTwentiethRow {
|
45
|
+
PascalsTriangle *triangle = [[PascalsTriangle alloc] initWithNumberOfRows:20];
|
46
|
+
NSArray *expected = @[
|
47
|
+
@1, @19, @171, @969, @3876, @11628, @27132, @50388, @75582, @92378, @92378,
|
48
|
+
@75582, @50388, @27132, @11628, @3876, @969, @171, @19, @1
|
49
|
+
];
|
50
|
+
XCTAssertEqualObjects(expected, [triangle.rows lastObject]);
|
51
|
+
}
|
52
|
+
|
53
|
+
@end
|
@@ -95,6 +95,8 @@
|
|
95
95
|
E9C1C0311D9EC1270015E86E /* RunLengthEncodingTest.m in Sources */ = {isa = PBXBuildFile; fileRef = E9C1C0301D9EC1270015E86E /* RunLengthEncodingTest.m */; };
|
96
96
|
E9F390071DFCA337005C5F46 /* IsogramExample.m in Sources */ = {isa = PBXBuildFile; fileRef = E9F390061DFCA337005C5F46 /* IsogramExample.m */; };
|
97
97
|
E9F390091DFCA350005C5F46 /* IsogramTest.m in Sources */ = {isa = PBXBuildFile; fileRef = E9F390081DFCA350005C5F46 /* IsogramTest.m */; };
|
98
|
+
E9FCFED31E98333D003080C0 /* PascalsTriangleExample.m in Sources */ = {isa = PBXBuildFile; fileRef = E9FCFED21E98333D003080C0 /* PascalsTriangleExample.m */; };
|
99
|
+
E9FCFED51E983361003080C0 /* PascalsTriangleTest.m in Sources */ = {isa = PBXBuildFile; fileRef = E9FCFED41E983361003080C0 /* PascalsTriangleTest.m */; };
|
98
100
|
E9FDCA191D5407D2004EE8DB /* RomanNumeralsExample.m in Sources */ = {isa = PBXBuildFile; fileRef = E9FDCA181D5407D2004EE8DB /* RomanNumeralsExample.m */; };
|
99
101
|
E9FDCA1B1D540801004EE8DB /* RomanNumeralsTest.m in Sources */ = {isa = PBXBuildFile; fileRef = E9FDCA1A1D540801004EE8DB /* RomanNumeralsTest.m */; };
|
100
102
|
/* End PBXBuildFile section */
|
@@ -213,6 +215,9 @@
|
|
213
215
|
E9F390051DFCA337005C5F46 /* IsogramExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IsogramExample.h; path = ../../exercises/isogram/IsogramExample.h; sourceTree = "<group>"; };
|
214
216
|
E9F390061DFCA337005C5F46 /* IsogramExample.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IsogramExample.m; path = ../../exercises/isogram/IsogramExample.m; sourceTree = "<group>"; };
|
215
217
|
E9F390081DFCA350005C5F46 /* IsogramTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IsogramTest.m; path = ../../exercises/isogram/IsogramTest.m; sourceTree = "<group>"; };
|
218
|
+
E9FCFED11E98333D003080C0 /* PascalsTriangleExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PascalsTriangleExample.h; path = "../../exercises/pascals-triangle/PascalsTriangleExample.h"; sourceTree = "<group>"; };
|
219
|
+
E9FCFED21E98333D003080C0 /* PascalsTriangleExample.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PascalsTriangleExample.m; path = "../../exercises/pascals-triangle/PascalsTriangleExample.m"; sourceTree = "<group>"; };
|
220
|
+
E9FCFED41E983361003080C0 /* PascalsTriangleTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PascalsTriangleTest.m; path = "../../exercises/pascals-triangle/PascalsTriangleTest.m"; sourceTree = "<group>"; };
|
216
221
|
E9FDCA171D5407D2004EE8DB /* RomanNumeralsExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RomanNumeralsExample.h; path = "../../exercises/roman-numerals/RomanNumeralsExample.h"; sourceTree = "<group>"; };
|
217
222
|
E9FDCA181D5407D2004EE8DB /* RomanNumeralsExample.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RomanNumeralsExample.m; path = "../../exercises/roman-numerals/RomanNumeralsExample.m"; sourceTree = "<group>"; };
|
218
223
|
E9FDCA1A1D540801004EE8DB /* RomanNumeralsTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RomanNumeralsTest.m; path = "../../exercises/roman-numerals/RomanNumeralsTest.m"; sourceTree = "<group>"; };
|
@@ -256,6 +261,7 @@
|
|
256
261
|
E92FCC0A1D78F2AA00061017 /* Meetup */,
|
257
262
|
E9E8B6F21D519E180012F12C /* NucleotideCount */,
|
258
263
|
E9B345F51DB937E5006EFBE2 /* Pangram */,
|
264
|
+
E9FCFED01E9832B2003080C0 /* PascalsTriangle */,
|
259
265
|
E9E8B6F31D519E200012F12C /* PerfectNumbers */,
|
260
266
|
E9E8B6F41D519E270012F12C /* PhoneNumber */,
|
261
267
|
E9381D491D8F293C003F22A1 /* Raindrops */,
|
@@ -661,6 +667,16 @@
|
|
661
667
|
name = Isogram;
|
662
668
|
sourceTree = "<group>";
|
663
669
|
};
|
670
|
+
E9FCFED01E9832B2003080C0 /* PascalsTriangle */ = {
|
671
|
+
isa = PBXGroup;
|
672
|
+
children = (
|
673
|
+
E9FCFED11E98333D003080C0 /* PascalsTriangleExample.h */,
|
674
|
+
E9FCFED21E98333D003080C0 /* PascalsTriangleExample.m */,
|
675
|
+
E9FCFED41E983361003080C0 /* PascalsTriangleTest.m */,
|
676
|
+
);
|
677
|
+
name = PascalsTriangle;
|
678
|
+
sourceTree = "<group>";
|
679
|
+
};
|
664
680
|
E9FDCA161D540793004EE8DB /* RomanNumerals */ = {
|
665
681
|
isa = PBXGroup;
|
666
682
|
children = (
|
@@ -762,6 +778,7 @@
|
|
762
778
|
E94ACA131D41760300D56CC2 /* AllYourBaseExample.m in Sources */,
|
763
779
|
E94ACA151D41763800D56CC2 /* AllYourBaseTest.m in Sources */,
|
764
780
|
E96993981DF60E1E009EA223 /* TransposeExample.m in Sources */,
|
781
|
+
E9FCFED51E983361003080C0 /* PascalsTriangleTest.m in Sources */,
|
765
782
|
E9C1C0291D9DB16B0015E86E /* AcronymExample.m in Sources */,
|
766
783
|
1EFACAA41CCCAF3D006F2E69 /* AnagramTest.m in Sources */,
|
767
784
|
E907FE921D87547D00B93DA9 /* ScrabbleScoreExample.m in Sources */,
|
@@ -808,6 +825,7 @@
|
|
808
825
|
E9FDCA1B1D540801004EE8DB /* RomanNumeralsTest.m in Sources */,
|
809
826
|
E9C1C0231D9D993E0015E86E /* SecretHandshakeExample.m in Sources */,
|
810
827
|
1EFACAB71CCCAF3D006F2E69 /* RobotNameExample.m in Sources */,
|
828
|
+
E9FCFED31E98333D003080C0 /* PascalsTriangleExample.m in Sources */,
|
811
829
|
1EFACAA51CCCAF3D006F2E69 /* BobExample.m in Sources */,
|
812
830
|
1EFACABB1CCCAF3D006F2E69 /* WordCountExample.m in Sources */,
|
813
831
|
1EFACAB01CCCAF3D006F2E69 /* LeapTest.m in Sources */,
|
@@ -1,9 +1,20 @@
|
|
1
|
-
def on_square(
|
2
|
-
|
1
|
+
def on_square(square):
|
2
|
+
check_square_input(square)
|
3
|
+
return 2 ** (square - 1)
|
3
4
|
|
4
5
|
|
5
6
|
def total_after(square):
|
7
|
+
check_square_input(square)
|
6
8
|
return sum(
|
7
9
|
on_square(n + 1) for n
|
8
10
|
in range(square)
|
9
11
|
)
|
12
|
+
|
13
|
+
|
14
|
+
def check_square_input(square):
|
15
|
+
if square == 0:
|
16
|
+
raise ValueError("Square input of zero is invalid.")
|
17
|
+
elif square < 0:
|
18
|
+
raise ValueError("Negative square input is invalid.")
|
19
|
+
elif square > 64:
|
20
|
+
raise ValueError("Square input greater than 64 is invalid.")
|
@@ -1,6 +1,9 @@
|
|
1
1
|
import unittest
|
2
2
|
|
3
|
-
from grains import
|
3
|
+
from grains import (
|
4
|
+
on_square,
|
5
|
+
total_after,
|
6
|
+
)
|
4
7
|
|
5
8
|
|
6
9
|
class GrainsTest(unittest.TestCase):
|
@@ -32,6 +35,24 @@ class GrainsTest(unittest.TestCase):
|
|
32
35
|
self.assertEqual(on_square(64), 9223372036854775808)
|
33
36
|
self.assertEqual(total_after(64), 18446744073709551615)
|
34
37
|
|
38
|
+
def test_square_0_raises_exception(self):
|
39
|
+
with self.assertRaises(ValueError):
|
40
|
+
on_square(0)
|
41
|
+
with self.assertRaises(ValueError):
|
42
|
+
total_after(0)
|
43
|
+
|
44
|
+
def test_square_negative_raises_exception(self):
|
45
|
+
with self.assertRaises(ValueError):
|
46
|
+
on_square(-1)
|
47
|
+
with self.assertRaises(ValueError):
|
48
|
+
total_after(-1)
|
49
|
+
|
50
|
+
def test_square_gt_64_raises_exception(self):
|
51
|
+
with self.assertRaises(ValueError):
|
52
|
+
on_square(65)
|
53
|
+
with self.assertRaises(ValueError):
|
54
|
+
total_after(65)
|
55
|
+
|
35
56
|
|
36
57
|
if __name__ == '__main__':
|
37
58
|
unittest.main()
|
data/tracks/swift/.travis.yml
CHANGED
@@ -14,12 +14,19 @@ matrix:
|
|
14
14
|
- ./xswift-test-spm
|
15
15
|
env: JOB=SPM
|
16
16
|
os: osx
|
17
|
-
osx_image: xcode8.
|
17
|
+
osx_image: xcode8.3
|
18
18
|
- script:
|
19
19
|
- bin/fetch-configlet
|
20
20
|
- bin/configlet .
|
21
21
|
- docker run -v `pwd`:/xswift norionomura/sourcekit:302 bash -c "cd /xswift && ./xswift-test-spm"
|
22
|
-
env: JOB=
|
22
|
+
env: JOB=Linux302
|
23
|
+
sudo: required
|
24
|
+
services: docker
|
25
|
+
- script:
|
26
|
+
- bin/fetch-configlet
|
27
|
+
- bin/configlet .
|
28
|
+
- docker run -v `pwd`:/xswift norionomura/sourcekit:31 bash -c "cd /xswift && ./xswift-test-spm"
|
29
|
+
env: JOB=Linux310
|
23
30
|
sudo: required
|
24
31
|
services: docker
|
25
32
|
|