trackler 2.2.0.0 → 2.2.0.1
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/CONTRIBUTING.md +1 -1
- data/tracks/bash/.travis.yml +1 -1
- data/tracks/bash/config.json +30 -3
- data/tracks/c/README.md +1 -1
- data/tracks/c/config.json +131 -39
- data/tracks/ceylon/README.md +6 -6
- data/tracks/ceylon/config.json +21 -3
- data/tracks/chapel/.travis.yml +1 -1
- data/tracks/clojurescript/.travis.yml +1 -1
- data/tracks/clojurescript/README.md +6 -6
- data/tracks/clojurescript/exercises/.keep +0 -0
- data/tracks/coffeescript/.travis.yml +1 -1
- data/tracks/coldfusion/.travis.yml +1 -1
- data/tracks/coq/.travis.yml +1 -1
- data/tracks/cpp/CMakeLists.txt +1 -0
- data/tracks/cpp/README.md +1 -1
- data/tracks/cpp/config.json +8 -0
- data/tracks/cpp/exercises/atbash-cipher/CMakeLists.txt +52 -0
- data/tracks/cpp/exercises/atbash-cipher/atbash_cipher_test.cpp +68 -0
- data/tracks/cpp/exercises/atbash-cipher/example.cpp +54 -0
- data/tracks/cpp/exercises/atbash-cipher/example.h +13 -0
- data/tracks/csharp/config.json +315 -6
- data/tracks/d/.travis.yml +1 -1
- data/tracks/dart/README.md +2 -2
- data/tracks/dart/config.json +21 -3
- data/tracks/delphi/README.md +1 -1
- data/tracks/delphi/config.json +83 -1
- data/tracks/ecmascript/config.json +10 -0
- data/tracks/ecmascript/exercises/accumulate/accumulate.spec.js +3 -9
- data/tracks/ecmascript/exercises/acronym/acronym.spec.js +2 -2
- data/tracks/ecmascript/exercises/all-your-base/all-your-base.spec.js +131 -133
- data/tracks/ecmascript/exercises/all-your-base/example.js +1 -3
- data/tracks/ecmascript/exercises/allergies/allergies.spec.js +8 -10
- data/tracks/ecmascript/exercises/allergies/example.js +3 -5
- data/tracks/ecmascript/exercises/alphametics/alphametics.spec.js +61 -63
- data/tracks/ecmascript/exercises/alphametics/example.js +99 -99
- data/tracks/ecmascript/exercises/anagram/anagram.spec.js +35 -37
- data/tracks/ecmascript/exercises/anagram/example.js +1 -3
- data/tracks/ecmascript/exercises/atbash-cipher/atbash-cipher.spec.js +1 -3
- data/tracks/ecmascript/exercises/atbash-cipher/example.js +3 -3
- data/tracks/ecmascript/exercises/beer-song/beer-song.spec.js +0 -2
- data/tracks/ecmascript/exercises/beer-song/example.js +9 -9
- data/tracks/ecmascript/exercises/binary/binary.spec.js +1 -2
- data/tracks/ecmascript/exercises/binary/example.js +3 -3
- data/tracks/ecmascript/exercises/binary-search/binary-search.spec.js +1 -3
- data/tracks/ecmascript/exercises/binary-search-tree/binary-search-tree.spec.js +13 -15
- data/tracks/ecmascript/exercises/binary-search-tree/example.js +2 -2
- data/tracks/ecmascript/exercises/bob/bob.spec.js +1 -3
- data/tracks/ecmascript/exercises/bob/example.js +3 -3
- data/tracks/ecmascript/exercises/bracket-push/example.js +2 -2
- data/tracks/ecmascript/exercises/circular-buffer/circular-buffer.spec.js +10 -12
- data/tracks/ecmascript/exercises/circular-buffer/example.js +12 -11
- data/tracks/ecmascript/exercises/clock/clock.spec.js +0 -8
- data/tracks/ecmascript/exercises/clock/example.js +11 -11
- data/tracks/ecmascript/exercises/connect/connect.spec.js +75 -77
- data/tracks/ecmascript/exercises/connect/example.js +27 -29
- data/tracks/ecmascript/exercises/crypto-square/crypto-square.spec.js +11 -11
- data/tracks/ecmascript/exercises/crypto-square/example.js +11 -10
- data/tracks/ecmascript/exercises/custom-set/custom-set.spec.js +2 -4
- data/tracks/ecmascript/exercises/custom-set/example.js +1 -1
- data/tracks/ecmascript/exercises/diamond/diamond.spec.js +20 -21
- data/tracks/ecmascript/exercises/diamond/example.js +12 -13
- data/tracks/ecmascript/exercises/difference-of-squares/difference-of-squares.spec.js +0 -5
- data/tracks/ecmascript/exercises/diffie-hellman/diffie-hellman.spec.js +7 -28
- data/tracks/ecmascript/exercises/etl/etl.spec.js +36 -18
- data/tracks/ecmascript/exercises/etl/example.js +3 -3
- data/tracks/ecmascript/exercises/flatten-array/example.js +1 -1
- data/tracks/ecmascript/exercises/flatten-array/flatten-array.spec.js +2 -3
- data/tracks/ecmascript/exercises/food-chain/example.js +12 -12
- data/tracks/ecmascript/exercises/food-chain/food-chain.spec.js +0 -1
- data/tracks/ecmascript/exercises/gigasecond/example.js +1 -1
- data/tracks/ecmascript/exercises/gigasecond/gigasecond.spec.js +0 -1
- data/tracks/ecmascript/exercises/grade-school/grade-school.spec.js +18 -19
- data/tracks/ecmascript/exercises/grains/grains.spec.js +0 -1
- data/tracks/ecmascript/exercises/hamming/example.js +3 -3
- data/tracks/ecmascript/exercises/hamming/hamming.spec.js +5 -6
- data/tracks/ecmascript/exercises/hello-world/example.js +1 -1
- data/tracks/ecmascript/exercises/hello-world/hello-world.spec.js +1 -1
- data/tracks/ecmascript/exercises/hexadecimal/example.js +2 -2
- data/tracks/ecmascript/exercises/hexadecimal/hexadecimal.spec.js +9 -11
- data/tracks/ecmascript/exercises/isogram/isogram.spec.js +22 -23
- data/tracks/ecmascript/exercises/kindergarten-garden/example.js +7 -7
- data/tracks/ecmascript/exercises/kindergarten-garden/kindergarten-garden.spec.js +0 -5
- data/tracks/ecmascript/exercises/largest-series-product/example.js +4 -8
- data/tracks/ecmascript/exercises/largest-series-product/largest-series-product.spec.js +5 -7
- data/tracks/ecmascript/exercises/leap/leap.spec.js +4 -6
- data/tracks/ecmascript/exercises/linked-list/example.js +2 -2
- data/tracks/ecmascript/exercises/list-ops/example.js +19 -19
- data/tracks/ecmascript/exercises/list-ops/list-ops.spec.js +2 -18
- data/tracks/ecmascript/exercises/luhn/example.js +1 -1
- data/tracks/ecmascript/exercises/luhn/luhn.spec.js +1 -3
- data/tracks/ecmascript/exercises/matrix/example.js +2 -4
- data/tracks/ecmascript/exercises/matrix/matrix.spec.js +0 -2
- data/tracks/ecmascript/exercises/meetup/example.js +12 -15
- data/tracks/ecmascript/exercises/meetup/meetup.spec.js +0 -2
- data/tracks/ecmascript/exercises/minesweeper/example.js +60 -0
- data/tracks/ecmascript/exercises/minesweeper/minesweeper.spec.js +174 -0
- data/tracks/ecmascript/exercises/minesweeper/package.json +69 -0
- data/tracks/ecmascript/exercises/nth-prime/example.js +3 -2
- data/tracks/ecmascript/exercises/nth-prime/nth-prime.spec.js +0 -1
- data/tracks/ecmascript/exercises/ocr-numbers/example.js +3 -3
- data/tracks/ecmascript/exercises/ocr-numbers/ocr-numbers.spec.js +16 -18
- data/tracks/ecmascript/exercises/octal/example.js +1 -1
- data/tracks/ecmascript/exercises/octal/octal.spec.js +0 -2
- data/tracks/ecmascript/exercises/palindrome-products/example.js +14 -11
- data/tracks/ecmascript/exercises/palindrome-products/palindrome-products.spec.js +15 -18
- data/tracks/ecmascript/exercises/pangram/example.js +6 -5
- data/tracks/ecmascript/exercises/pangram/pangram.spec.js +10 -12
- data/tracks/ecmascript/exercises/pascals-triangle/example.js +2 -2
- data/tracks/ecmascript/exercises/pascals-triangle/pascals-triangle.spec.js +6 -8
- data/tracks/ecmascript/exercises/perfect-numbers/example.js +3 -5
- data/tracks/ecmascript/exercises/perfect-numbers/perfect-numbers.spec.js +0 -10
- data/tracks/ecmascript/exercises/phone-number/example.js +2 -2
- data/tracks/ecmascript/exercises/phone-number/phone-number.spec.js +0 -2
- data/tracks/ecmascript/exercises/pig-latin/example.js +4 -4
- data/tracks/ecmascript/exercises/pig-latin/pig-latin.spec.js +0 -1
- data/tracks/ecmascript/exercises/prime-factors/example.js +2 -2
- data/tracks/ecmascript/exercises/prime-factors/prime-factors.spec.js +0 -2
- data/tracks/ecmascript/exercises/pythagorean-triplet/pythagorean-triplet.spec.js +3 -11
- data/tracks/ecmascript/exercises/queen-attack/example.js +17 -17
- data/tracks/ecmascript/exercises/queen-attack/queen-attack.spec.js +7 -8
- data/tracks/ecmascript/exercises/raindrops/example.js +1 -1
- data/tracks/ecmascript/exercises/raindrops/raindrops.spec.js +1 -2
- data/tracks/ecmascript/exercises/rna-transcription/example.js +5 -5
- data/tracks/ecmascript/exercises/rna-transcription/rna-transcription.spec.js +4 -5
- data/tracks/ecmascript/exercises/robot-name/example.js +6 -6
- data/tracks/ecmascript/exercises/robot-name/robot-name.spec.js +10 -11
- data/tracks/ecmascript/exercises/robot-simulator/example.js +1 -1
- data/tracks/ecmascript/exercises/robot-simulator/robot-simulator.spec.js +31 -32
- data/tracks/ecmascript/exercises/roman-numerals/example.js +16 -16
- data/tracks/ecmascript/exercises/saddle-points/saddle-points.spec.js +3 -3
- data/tracks/ecmascript/exercises/say/example.js +25 -25
- data/tracks/ecmascript/exercises/say/say.spec.js +2 -3
- data/tracks/ecmascript/exercises/scrabble-score/example.js +27 -9
- data/tracks/ecmascript/exercises/scrabble-score/scrabble-score.spec.js +6 -7
- data/tracks/ecmascript/exercises/secret-handshake/example.js +2 -3
- data/tracks/ecmascript/exercises/secret-handshake/secret-handshake.spec.js +3 -5
- data/tracks/ecmascript/exercises/series/series.spec.js +1 -3
- data/tracks/ecmascript/exercises/sieve/example.js +4 -3
- data/tracks/ecmascript/exercises/sieve/sieve.spec.js +0 -2
- data/tracks/ecmascript/exercises/simple-cipher/example.js +8 -9
- data/tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js +4 -4
- data/tracks/ecmascript/exercises/space-age/example.js +1 -1
- data/tracks/ecmascript/exercises/space-age/space-age.spec.js +9 -11
- data/tracks/ecmascript/exercises/strain/example.js +4 -4
- data/tracks/ecmascript/exercises/strain/strain.spec.js +14 -16
- data/tracks/ecmascript/exercises/sum-of-multiples/example.js +4 -4
- data/tracks/ecmascript/exercises/triangle/triangle.spec.js +2 -4
- data/tracks/ecmascript/exercises/trinary/example.js +3 -3
- data/tracks/ecmascript/exercises/trinary/trinary.spec.js +0 -2
- data/tracks/ecmascript/exercises/two-bucket/example.js +30 -27
- data/tracks/ecmascript/exercises/two-bucket/two-bucket.spec.js +4 -8
- data/tracks/ecmascript/exercises/word-count/example.js +2 -2
- data/tracks/ecmascript/exercises/word-count/word-count.spec.js +2 -3
- data/tracks/ecmascript/exercises/wordy/example.js +6 -6
- data/tracks/ecmascript/exercises/wordy/wordy.spec.js +2 -4
- data/tracks/factor/config.json +15 -6
- data/tracks/fortran/.travis.yml +1 -1
- data/tracks/fsharp/config.json +312 -10
- data/tracks/go/README.md +1 -1
- data/tracks/go/config.json +523 -155
- data/tracks/haskell/README.md +2 -2
- data/tracks/haskell/config.json +256 -7
- data/tracks/haxe/.travis.yml +1 -1
- data/tracks/haxe/Makefile +2 -2
- data/tracks/haxe/config.json +8 -5
- data/tracks/java/CONTRIBUTING.md +2 -2
- data/tracks/java/config.json +277 -17
- data/tracks/java/exercises/rotational-cipher/build.gradle +17 -0
- data/tracks/java/exercises/rotational-cipher/src/example/java/RotationalCipher.java +37 -0
- data/tracks/java/exercises/rotational-cipher/src/main/java/.keep +0 -0
- data/tracks/java/exercises/rotational-cipher/src/test/java/RotationalCipherTest.java +81 -0
- data/tracks/java/exercises/settings.gradle +1 -0
- data/tracks/java/exercises/twelve-days/src/main/java/TwelveDays.java +4 -0
- data/tracks/julia/.travis.yml +1 -1
- data/tracks/julia/README.md +1 -1
- data/tracks/kotlin/README.md +2 -2
- data/tracks/kotlin/exercises/hello-world/TUTORIAL.md +3 -3
- data/tracks/lisp/config.json +97 -3
- data/tracks/lisp/exercises/pascals-triangle/example.lisp +21 -0
- data/tracks/lisp/exercises/pascals-triangle/pascal.lisp +7 -0
- data/tracks/lisp/exercises/pascals-triangle/pascals-triangle-test.lisp +34 -0
- data/tracks/lua/.travis.yml +1 -1
- data/tracks/lua/README.md +1 -1
- data/tracks/mips/.travis.yml +1 -1
- data/tracks/mips/config.json +56 -17
- data/tracks/nasm/.travis.yml +1 -1
- data/tracks/nim/.travis.yml +1 -1
- data/tracks/ocaml/README.md +3 -3
- data/tracks/ocaml/config.json +130 -4
- data/tracks/perl5/docs/TESTS.md +40 -26
- data/tracks/plsql/.travis.yml +1 -1
- data/tracks/plsql/config.json +40 -13
- data/tracks/pony/.travis.yml +1 -1
- data/tracks/pony/bin/install-deps +4 -3
- data/tracks/prolog/.travis.yml +1 -1
- data/tracks/r/README.md +5 -5
- data/tracks/r/config.json +102 -30
- data/tracks/rust/.travis.yml +1 -1
- data/tracks/rust/config.json +172 -4
- data/tracks/rust/docs/EXERCISE_README_INSERT.md +1 -1
- data/tracks/sml/config.json +26 -3
- data/tracks/vimscript/config.json +60 -3
- metadata +16 -1
@@ -3,137 +3,135 @@ import Converter from './all-your-base';
|
|
3
3
|
const converter = new Converter();
|
4
4
|
|
5
5
|
describe('Converter', () => {
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
});
|
138
|
-
|
6
|
+
test('single bit one to decimal', () => {
|
7
|
+
expect(converter.convert([1], 2, 10)).toEqual([1]);
|
8
|
+
});
|
9
|
+
|
10
|
+
xtest('binary to single decimal', () => {
|
11
|
+
expect(converter.convert([1, 0, 1], 2, 10)).toEqual([5]);
|
12
|
+
});
|
13
|
+
|
14
|
+
xtest('single decimal to binary', () => {
|
15
|
+
expect(converter.convert([5], 10, 2)).toEqual([1, 0, 1]);
|
16
|
+
});
|
17
|
+
|
18
|
+
xtest('binary to multiple decimal', () => {
|
19
|
+
expect(converter.convert([1, 0, 1, 0, 1, 0], 2, 10)).toEqual([4, 2]);
|
20
|
+
});
|
21
|
+
|
22
|
+
xtest('decimal to binary', () => {
|
23
|
+
expect(converter.convert([4, 2], 10, 2)).toEqual([1, 0, 1, 0, 1, 0]);
|
24
|
+
});
|
25
|
+
|
26
|
+
xtest('trinary to hexadecimal', () => {
|
27
|
+
expect(converter.convert([1, 1, 2, 0], 3, 16)).toEqual([2, 10]);
|
28
|
+
});
|
29
|
+
|
30
|
+
xtest('hexadecimal to trinary', () => {
|
31
|
+
expect(converter.convert([2, 10], 16, 3)).toEqual([1, 1, 2, 0]);
|
32
|
+
});
|
33
|
+
|
34
|
+
xtest('15-bit integer', () => {
|
35
|
+
expect(converter.convert([3, 46, 60], 97, 73)).toEqual([6, 10, 45]);
|
36
|
+
});
|
37
|
+
|
38
|
+
xtest('empty list', () => {
|
39
|
+
expect(() => {
|
40
|
+
converter.convert([], 2, 10);
|
41
|
+
}).toThrow(new Error('Input has wrong format'));
|
42
|
+
});
|
43
|
+
|
44
|
+
xtest('single zero', () => {
|
45
|
+
expect(converter.convert([0], 10, 2)).toEqual([0]);
|
46
|
+
});
|
47
|
+
|
48
|
+
xtest('multiple zeros', () => {
|
49
|
+
expect(() => {
|
50
|
+
converter.convert([0, 0, 0], 10, 2);
|
51
|
+
}).toThrow(new Error('Input has wrong format'));
|
52
|
+
});
|
53
|
+
|
54
|
+
xtest('leading zeros', () => {
|
55
|
+
expect(() => {
|
56
|
+
converter.convert([0, 6, 0], 7, 10);
|
57
|
+
}).toThrow(new Error('Input has wrong format'));
|
58
|
+
});
|
59
|
+
|
60
|
+
xtest('negative digit', () => {
|
61
|
+
expect(() => {
|
62
|
+
converter.convert([1, -1, 1, 0, 1, 0], 2, 10);
|
63
|
+
}).toThrow(new Error('Input has wrong format'));
|
64
|
+
});
|
65
|
+
|
66
|
+
xtest('invalid positive digit', () => {
|
67
|
+
expect(() => {
|
68
|
+
converter.convert([1, 2, 1, 0, 1, 0], 2, 10);
|
69
|
+
}).toThrow(new Error('Input has wrong format'));
|
70
|
+
});
|
71
|
+
|
72
|
+
xtest('first base is one', () => {
|
73
|
+
expect(() => {
|
74
|
+
converter.convert([], 1, 10);
|
75
|
+
}).toThrow(new Error('Wrong input base'));
|
76
|
+
});
|
77
|
+
|
78
|
+
xtest('second base is one', () => {
|
79
|
+
expect(() => {
|
80
|
+
converter.convert([1, 0, 1, 0, 1, 0], 2, 1);
|
81
|
+
}).toThrow(new Error('Wrong output base'));
|
82
|
+
});
|
83
|
+
|
84
|
+
xtest('first base is zero', () => {
|
85
|
+
expect(() => {
|
86
|
+
converter.convert([], 0, 10);
|
87
|
+
}).toThrow(new Error('Wrong input base'));
|
88
|
+
});
|
89
|
+
|
90
|
+
xtest('second base is zero', () => {
|
91
|
+
expect(() => {
|
92
|
+
converter.convert([7], 10, 0);
|
93
|
+
}).toThrow(new Error('Wrong output base'));
|
94
|
+
});
|
95
|
+
|
96
|
+
xtest('first base is negative', () => {
|
97
|
+
expect(() => {
|
98
|
+
converter.convert([1], -2, 10);
|
99
|
+
}).toThrow(new Error('Wrong input base'));
|
100
|
+
});
|
101
|
+
|
102
|
+
xtest('second base is negative', () => {
|
103
|
+
expect(() => {
|
104
|
+
converter.convert([1], 2, -7);
|
105
|
+
}).toThrow(new Error('Wrong output base'));
|
106
|
+
});
|
107
|
+
|
108
|
+
xtest('both bases are negative', () => {
|
109
|
+
expect(() => {
|
110
|
+
converter.convert([1], -2, -7);
|
111
|
+
}).toThrow(new Error('Wrong input base'));
|
112
|
+
});
|
113
|
+
|
114
|
+
xtest('missing input base throws an error', () => {
|
115
|
+
expect(() => {
|
116
|
+
converter.convert([0]);
|
117
|
+
}).toThrow(new Error('Wrong input base'));
|
118
|
+
});
|
119
|
+
|
120
|
+
xtest('wrong input_base base not integer', () => {
|
121
|
+
expect(() => {
|
122
|
+
converter.convert([0], 2.5);
|
123
|
+
}).toThrow(new Error('Wrong input base'));
|
124
|
+
});
|
125
|
+
|
126
|
+
xtest('missing output base throws an error', () => {
|
127
|
+
expect(() => {
|
128
|
+
converter.convert([0], 2);
|
129
|
+
}).toThrow(new Error('Wrong output base'));
|
130
|
+
});
|
131
|
+
|
132
|
+
xtest('wrong output_base base not integer', () => {
|
133
|
+
expect(() => {
|
134
|
+
converter.convert([0], 3, 2.5);
|
135
|
+
}).toThrow(new Error('Wrong output base'));
|
136
|
+
});
|
139
137
|
});
|
@@ -47,9 +47,7 @@ export default class Converter {
|
|
47
47
|
return [1];
|
48
48
|
}
|
49
49
|
const decimalValue = array
|
50
|
-
.reduce((accumulator, value) =>
|
51
|
-
return accumulator * inputBase + value;
|
52
|
-
}, 0);
|
50
|
+
.reduce((accumulator, value) => accumulator * inputBase + value, 0);
|
53
51
|
return convertFromDecimalToBase(decimalValue, outputBase);
|
54
52
|
}
|
55
53
|
}
|
@@ -1,7 +1,6 @@
|
|
1
1
|
import Allergies from './allergies';
|
2
2
|
|
3
3
|
describe('Allergies', () => {
|
4
|
-
|
5
4
|
test('no allergies at all', () => {
|
6
5
|
const allergies = new Allergies(0);
|
7
6
|
expect(allergies.list()).toEqual([]);
|
@@ -9,37 +8,37 @@ describe('Allergies', () => {
|
|
9
8
|
|
10
9
|
xtest('allergies to eggs', () => {
|
11
10
|
const allergies = new Allergies(1);
|
12
|
-
expect(allergies.list()).toEqual([
|
11
|
+
expect(allergies.list()).toEqual(['eggs']);
|
13
12
|
});
|
14
13
|
|
15
14
|
xtest('allergies to peanuts', () => {
|
16
15
|
const allergies = new Allergies(2);
|
17
|
-
expect(allergies.list()).toEqual([
|
16
|
+
expect(allergies.list()).toEqual(['peanuts']);
|
18
17
|
});
|
19
18
|
|
20
19
|
xtest('allergies to strawberries', () => {
|
21
20
|
const allergies = new Allergies(8);
|
22
|
-
expect(allergies.list()).toEqual([
|
21
|
+
expect(allergies.list()).toEqual(['strawberries']);
|
23
22
|
});
|
24
23
|
|
25
24
|
xtest('allergies to eggs and peanuts', () => {
|
26
25
|
const allergies = new Allergies(3);
|
27
|
-
expect(allergies.list()).toEqual([
|
26
|
+
expect(allergies.list()).toEqual(['eggs', 'peanuts']);
|
28
27
|
});
|
29
28
|
|
30
29
|
xtest('allergies to more than eggs but not peanuts', () => {
|
31
30
|
const allergies = new Allergies(5);
|
32
|
-
expect(allergies.list()).toEqual([
|
31
|
+
expect(allergies.list()).toEqual(['eggs', 'shellfish']);
|
33
32
|
});
|
34
33
|
|
35
34
|
xtest('allergic to lots of stuff', () => {
|
36
35
|
const allergies = new Allergies(248);
|
37
|
-
expect(allergies.list()).toEqual([
|
36
|
+
expect(allergies.list()).toEqual(['strawberries', 'tomatoes', 'chocolate', 'pollen', 'cats']);
|
38
37
|
});
|
39
38
|
|
40
39
|
xtest('allergic to everything', () => {
|
41
40
|
const allergies = new Allergies(255);
|
42
|
-
expect(allergies.list()).toEqual([
|
41
|
+
expect(allergies.list()).toEqual(['eggs', 'peanuts', 'shellfish', 'strawberries', 'tomatoes', 'chocolate', 'pollen', 'cats']);
|
43
42
|
});
|
44
43
|
|
45
44
|
xtest('no allergic means not allergic', () => {
|
@@ -61,7 +60,6 @@ describe('Allergies', () => {
|
|
61
60
|
|
62
61
|
xtest('ignore non allergen score parts', () => {
|
63
62
|
const allergies = new Allergies(509);
|
64
|
-
expect(allergies.list()).toEqual([
|
63
|
+
expect(allergies.list()).toEqual(['eggs', 'shellfish', 'strawberries', 'tomatoes', 'chocolate', 'pollen', 'cats']);
|
65
64
|
});
|
66
|
-
|
67
65
|
});
|
@@ -6,8 +6,8 @@ const possibleAllergies = [
|
|
6
6
|
'tomatoes',
|
7
7
|
'chocolate',
|
8
8
|
'pollen',
|
9
|
-
'cats'
|
10
|
-
];
|
9
|
+
'cats',
|
10
|
+
];
|
11
11
|
|
12
12
|
class Allergies {
|
13
13
|
constructor(allergenIndex) {
|
@@ -15,9 +15,7 @@ class Allergies {
|
|
15
15
|
}
|
16
16
|
|
17
17
|
list() {
|
18
|
-
return possibleAllergies.filter((allergy, i) =>
|
19
|
-
return this.allergenIndex & Math.pow(2, i);
|
20
|
-
});
|
18
|
+
return possibleAllergies.filter((allergy, i) => this.allergenIndex & Math.pow(2, i));
|
21
19
|
}
|
22
20
|
|
23
21
|
allergicTo(food) {
|
@@ -1,95 +1,93 @@
|
|
1
1
|
import solve from './alphametics';
|
2
2
|
|
3
|
-
describe(
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
"L": 0
|
3
|
+
describe('Solve the alphametics puzzle', () => {
|
4
|
+
test('puzzle with three letters', () => {
|
5
|
+
const puzzle = 'I + BB == ILL';
|
6
|
+
const expected = {
|
7
|
+
I: 1,
|
8
|
+
B: 9,
|
9
|
+
L: 0,
|
11
10
|
};
|
12
11
|
expect(solve(puzzle)).toEqual(expected);
|
13
12
|
});
|
14
13
|
|
15
|
-
xtest(
|
16
|
-
|
14
|
+
xtest('solution must have unique value for each letter', () => {
|
15
|
+
const puzzle = 'A == B';
|
17
16
|
expect(solve(puzzle)).toBeNull();
|
18
17
|
});
|
19
18
|
|
20
|
-
xtest(
|
21
|
-
|
19
|
+
xtest('leading zero solution is invalid', () => {
|
20
|
+
const puzzle = 'ACA + DD == BD';
|
22
21
|
expect(solve(puzzle)).toBeNull();
|
23
22
|
});
|
24
23
|
|
25
|
-
xtest(
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
24
|
+
xtest('puzzle with four letters', () => {
|
25
|
+
const puzzle = 'AS + A == MOM';
|
26
|
+
const expected = {
|
27
|
+
A: 9,
|
28
|
+
S: 2,
|
29
|
+
M: 1,
|
30
|
+
O: 0,
|
32
31
|
};
|
33
32
|
expect(solve(puzzle)).toEqual(expected);
|
34
33
|
});
|
35
34
|
|
36
|
-
xtest(
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
35
|
+
xtest('puzzle with six letters', () => {
|
36
|
+
const puzzle = 'NO + NO + TOO == LATE';
|
37
|
+
const expected = {
|
38
|
+
N: 7,
|
39
|
+
O: 4,
|
40
|
+
T: 9,
|
41
|
+
L: 1,
|
42
|
+
A: 0,
|
43
|
+
E: 2,
|
45
44
|
};
|
46
45
|
expect(solve(puzzle)).toEqual(expected);
|
47
46
|
});
|
48
47
|
|
49
|
-
xtest(
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
48
|
+
xtest('puzzle with seven letters', () => {
|
49
|
+
const puzzle = 'HE + SEES + THE == LIGHT';
|
50
|
+
const expected = {
|
51
|
+
E: 4,
|
52
|
+
G: 2,
|
53
|
+
H: 5,
|
54
|
+
I: 0,
|
55
|
+
L: 1,
|
56
|
+
S: 9,
|
57
|
+
T: 7,
|
59
58
|
};
|
60
59
|
expect(solve(puzzle)).toEqual(expected);
|
61
60
|
});
|
62
61
|
|
63
|
-
xtest(
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
62
|
+
xtest('puzzle with eight letters', () => {
|
63
|
+
const puzzle = 'SEND + MORE == MONEY';
|
64
|
+
const expected = {
|
65
|
+
S: 9,
|
66
|
+
E: 5,
|
67
|
+
N: 6,
|
68
|
+
D: 7,
|
69
|
+
M: 1,
|
70
|
+
O: 0,
|
71
|
+
R: 8,
|
72
|
+
Y: 2,
|
74
73
|
};
|
75
74
|
expect(solve(puzzle)).toEqual(expected);
|
76
75
|
});
|
77
76
|
|
78
|
-
xtest(
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
77
|
+
xtest('puzzle with ten letters', () => {
|
78
|
+
const puzzle = 'AND + A + STRONG + OFFENSE + AS + A + GOOD == DEFENSE';
|
79
|
+
const expected = {
|
80
|
+
A: 5,
|
81
|
+
D: 3,
|
82
|
+
E: 4,
|
83
|
+
F: 7,
|
84
|
+
G: 8,
|
85
|
+
N: 0,
|
86
|
+
O: 2,
|
87
|
+
R: 1,
|
88
|
+
S: 6,
|
89
|
+
T: 9,
|
91
90
|
};
|
92
91
|
expect(solve(puzzle)).toEqual(expected);
|
93
92
|
});
|
94
|
-
|
95
93
|
});
|