trackler 2.0.8.46 → 2.0.8.47
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/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
|
|