trackler 2.2.1.132 → 2.2.1.133
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/dart/config.json +13 -0
- data/tracks/dart/exercises/armstrong-numbers/README.md +29 -0
- data/tracks/dart/exercises/armstrong-numbers/lib/armstrong_numbers.dart +3 -0
- data/tracks/dart/exercises/armstrong-numbers/lib/example.dart +20 -0
- data/tracks/dart/exercises/armstrong-numbers/pubspec.yaml +3 -0
- data/tracks/dart/exercises/armstrong-numbers/test/armstrong_numbers_test.dart +48 -0
- data/tracks/dart/exercises/leap/test/leap_test.dart +15 -0
- data/tracks/haskell/.travis.yml +1 -0
- data/tracks/nim/.travis.yml +7 -4
- data/tracks/nim/exercises/anagram/example.nim +1 -1
- data/tracks/nim/exercises/word-count/example.nim +3 -1
- data/tracks/r/config.json +1 -1
- data/tracks/scala/exercises/bob/README.md +2 -0
- data/tracks/typescript/config.json +18 -4
- data/tracks/typescript/exercises/house/README.md +138 -0
- data/tracks/typescript/exercises/house/house.example.ts +67 -0
- data/tracks/typescript/exercises/house/house.test.ts +292 -0
- data/tracks/typescript/exercises/house/house.ts +0 -0
- data/tracks/typescript/exercises/house/package.json +36 -0
- data/tracks/typescript/exercises/house/tsconfig.json +22 -0
- data/tracks/typescript/exercises/house/tslint.json +127 -0
- data/tracks/typescript/exercises/house/yarn.lock +2624 -0
- metadata +15 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 823d7cfe149655bf74ac3093c3948cd9e385e612
|
4
|
+
data.tar.gz: 42596817dd6559ca7642e6eb9ceb543dc9055751
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d07624593c2464b858dbf6c2f6bf7c78d38451b1f0a579d8321e9a8a3a3e2632bd5f127d09f3c96e4125603e43193260d8e7c2612001b14b9f319f3e34835ece
|
7
|
+
data.tar.gz: 20c3e8d8037e8fb4130997771cc0886c83f214c94a7a0060870af86d9e5ba18d449e7d56430bfa29c96404f0d0c4e890ca208165cd573c9ed32e9169ffac104a
|
data/lib/trackler/version.rb
CHANGED
data/tracks/dart/config.json
CHANGED
@@ -26,6 +26,19 @@
|
|
26
26
|
"unlocked_by": null,
|
27
27
|
"uuid": "4bcfd789-dee6-4dd9-8524-076508504eda"
|
28
28
|
},
|
29
|
+
{
|
30
|
+
"core": true,
|
31
|
+
"difficulty": 1,
|
32
|
+
"slug": "armstrong-numbers",
|
33
|
+
"topics": [
|
34
|
+
"equality",
|
35
|
+
"integers",
|
36
|
+
"logic",
|
37
|
+
"strings"
|
38
|
+
],
|
39
|
+
"unlocked_by": null,
|
40
|
+
"uuid": "4f650701-9568-4d95-9f72-be4bde2c90ec"
|
41
|
+
},
|
29
42
|
{
|
30
43
|
"core": true,
|
31
44
|
"difficulty": 2,
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# Armstrong Numbers
|
2
|
+
|
3
|
+
An [Armstrong number](https://en.wikipedia.org/wiki/Narcissistic_number) is a number that is the sum of its own digits each raised to the power of the number of digits.
|
4
|
+
|
5
|
+
For example:
|
6
|
+
|
7
|
+
- 9 is an Armstrong number, because `9 = 9^1 = 9`
|
8
|
+
- 10 is *not* an Armstrong number, because `10 != 1^2 + 0^2 = 2`
|
9
|
+
- 153 is an Armstrong number, because: `153 = 1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153`
|
10
|
+
- 154 is *not* an Armstrong number, because: `154 != 1^3 + 5^3 + 4^3 = 1 + 125 + 64 = 190`
|
11
|
+
|
12
|
+
Write some code to determine whether a number is an Armstrong number.
|
13
|
+
|
14
|
+
|
15
|
+
To run the tests:
|
16
|
+
|
17
|
+
```sh
|
18
|
+
$ pub run test
|
19
|
+
```
|
20
|
+
|
21
|
+
For more detailed info about the Dart track see the [help page](http://exercism.io/languages/dart).
|
22
|
+
|
23
|
+
|
24
|
+
## Source
|
25
|
+
|
26
|
+
Wikipedia [https://en.wikipedia.org/wiki/Narcissistic_number](https://en.wikipedia.org/wiki/Narcissistic_number)
|
27
|
+
|
28
|
+
## Submitting Incomplete Solutions
|
29
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
@@ -0,0 +1,20 @@
|
|
1
|
+
import 'dart:math' show pow;
|
2
|
+
|
3
|
+
class ArmstrongNumbers {
|
4
|
+
|
5
|
+
/// The parameters and variables within the method that are set to final in order to prevent the accidentally modification of the value.
|
6
|
+
/// As those variables are not needed to be changed.
|
7
|
+
bool isArmstrongNumber(final int number) {
|
8
|
+
final String numberAsString = number.toString();
|
9
|
+
final int numOfDigits = numberAsString.length;
|
10
|
+
int sum = 0;
|
11
|
+
|
12
|
+
for (int count = 0; count < numOfDigits; count++) {
|
13
|
+
final String digitAsString = numberAsString.substring(count, count + 1);
|
14
|
+
final int digit = int.parse(digitAsString);
|
15
|
+
sum += pow(digit, numOfDigits);
|
16
|
+
}
|
17
|
+
|
18
|
+
return number == sum;
|
19
|
+
}
|
20
|
+
}
|
@@ -0,0 +1,48 @@
|
|
1
|
+
import "package:test/test.dart";
|
2
|
+
import "package:armstrong_numbers/armstrong_numbers.dart";
|
3
|
+
|
4
|
+
void main() {
|
5
|
+
final ArmstrongNumbers armstrongNumbers = new ArmstrongNumbers();
|
6
|
+
|
7
|
+
group("ArmstrongNumbers", () {
|
8
|
+
test("Single digit numbers are Armstrong numbers", () {
|
9
|
+
final bool result = armstrongNumbers.isArmstrongNumber(5);
|
10
|
+
expect(result, equals(true));
|
11
|
+
}, skip: false);
|
12
|
+
|
13
|
+
test("There are no 2 digit Armstrong numbers", () {
|
14
|
+
final bool result = armstrongNumbers.isArmstrongNumber(10);
|
15
|
+
expect(result, equals(false));
|
16
|
+
}, skip: true);
|
17
|
+
|
18
|
+
test("Three digit number that is an Armstrong number", () {
|
19
|
+
final bool result = armstrongNumbers.isArmstrongNumber(153);
|
20
|
+
expect(result, equals(true));
|
21
|
+
}, skip: true);
|
22
|
+
|
23
|
+
test("Three digit number that is not an Armstrong number", () {
|
24
|
+
final bool result = armstrongNumbers.isArmstrongNumber(100);
|
25
|
+
expect(result, equals(false));
|
26
|
+
}, skip: true);
|
27
|
+
|
28
|
+
test("Four digit number that is an Armstrong number", () {
|
29
|
+
final bool result = armstrongNumbers.isArmstrongNumber(9474);
|
30
|
+
expect(result, equals(true));
|
31
|
+
}, skip: true);
|
32
|
+
|
33
|
+
test("Four digit number that is not an Armstrong number", () {
|
34
|
+
final bool result = armstrongNumbers.isArmstrongNumber(9475);
|
35
|
+
expect(result, equals(false));
|
36
|
+
}, skip: true);
|
37
|
+
|
38
|
+
test("Seven digit number that is an Armstrong number", () {
|
39
|
+
final bool result = armstrongNumbers.isArmstrongNumber(9926315);
|
40
|
+
expect(result, equals(true));
|
41
|
+
}, skip: true);
|
42
|
+
|
43
|
+
test("Seven digit number that is not an Armstrong number", () {
|
44
|
+
final bool result = armstrongNumbers.isArmstrongNumber(9926314);
|
45
|
+
expect(result, equals(false));
|
46
|
+
}, skip: true);
|
47
|
+
});
|
48
|
+
}
|
@@ -24,5 +24,20 @@ void main() {
|
|
24
24
|
final bool result = leap.leapYear(2000);
|
25
25
|
expect(result, equals(true));
|
26
26
|
}, skip: true);
|
27
|
+
|
28
|
+
test("is introduced every 4 years to adjust about a day before 400 A.D.", () {
|
29
|
+
final bool result = leap.leapYear(4);
|
30
|
+
expect(result, equals(true));
|
31
|
+
}, skip: true);
|
32
|
+
|
33
|
+
test("is skipped every 100 years to remove an extra day before 400 A.D.", () {
|
34
|
+
final bool result = leap.leapYear(300);
|
35
|
+
expect(result, equals(false));
|
36
|
+
}, skip: true);
|
37
|
+
|
38
|
+
test("is reintroduced every 400 years to adjust another day including 400 A.D.", () {
|
39
|
+
final bool result = leap.leapYear(400);
|
40
|
+
expect(result, equals(true));
|
41
|
+
}, skip: true);
|
27
42
|
});
|
28
43
|
}
|
data/tracks/haskell/.travis.yml
CHANGED
@@ -30,6 +30,7 @@ install:
|
|
30
30
|
- travis_retry curl -L https://www.stackage.org/stack/linux-x86_64 -o pack.tgz
|
31
31
|
- tar xzf pack.tgz --wildcards --strip-components=1 -C ${HOME}/bin '*/stack'
|
32
32
|
- stack --resolver ${RESOLVER} --install-ghc install hlint
|
33
|
+
- stack --version
|
33
34
|
|
34
35
|
script:
|
35
36
|
- "sh ./bin/ensure-readmes-are-updated.sh"
|
data/tracks/nim/.travis.yml
CHANGED
@@ -3,15 +3,18 @@ dist: trusty
|
|
3
3
|
|
4
4
|
language: c
|
5
5
|
|
6
|
+
env:
|
7
|
+
- NIM_VERSION="0.18.0"
|
8
|
+
|
6
9
|
install:
|
7
10
|
- cd _test
|
8
|
-
- wget
|
9
|
-
- tar xf nim
|
10
|
-
- cd nim
|
11
|
+
- wget https://nim-lang.org/download/nim-$NIM_VERSION.tar.xz
|
12
|
+
- tar xf nim-$NIM_VERSION.tar.xz
|
13
|
+
- cd nim-$NIM_VERSION
|
11
14
|
- ./build.sh
|
12
15
|
- cd ../..
|
13
16
|
|
14
|
-
before_script: export PATH=$PATH:$PWD/_test/nim
|
17
|
+
before_script: export PATH=$PATH:$PWD/_test/nim-$NIM_VERSION/bin
|
15
18
|
|
16
19
|
script:
|
17
20
|
- bin/fetch-configlet
|
@@ -9,7 +9,7 @@ proc isAnagramTo(a, b: TAnagram): bool {.noSideEffect, procVar.} =
|
|
9
9
|
a.chars == b.chars and cmpIgnoreCase(a.word, b.word) != 0
|
10
10
|
|
11
11
|
proc anagram(word: string): TAnagram =
|
12
|
-
var chars = toSeq(word.
|
12
|
+
var chars = toSeq(word.toLowerAscii().items)
|
13
13
|
sort(chars, cmp[char])
|
14
14
|
(word, chars)
|
15
15
|
|
@@ -6,12 +6,14 @@ type TWordCount* = CritBitTree[int]
|
|
6
6
|
|
7
7
|
iterator words(s: string): string =
|
8
8
|
for word in s.split(AllChars - Letters - Digits - {'\0'}):
|
9
|
-
yield
|
9
|
+
yield toLowerAscii(word)
|
10
10
|
|
11
11
|
proc wordCount*(s: string): TWordCount {.noSideEffect.} =
|
12
12
|
## Returns a mapping from the words (alphanumeric sequences) in `s` to their
|
13
13
|
## respective counts.
|
14
14
|
for word in words(s):
|
15
|
+
if word.len == 0:
|
16
|
+
continue
|
15
17
|
if not result.hasKey(word):
|
16
18
|
result[word] = 0
|
17
19
|
result[word] = result[word] + 1
|
data/tracks/r/config.json
CHANGED
@@ -6,6 +6,8 @@ Bob answers 'Sure.' if you ask him a question.
|
|
6
6
|
|
7
7
|
He answers 'Whoa, chill out!' if you yell at him.
|
8
8
|
|
9
|
+
He answers 'Calm down, I know what I'm doing!' if you yell a question at him.
|
10
|
+
|
9
11
|
He says 'Fine. Be that way!' if you address him without actually saying
|
10
12
|
anything.
|
11
13
|
|
@@ -386,6 +386,20 @@
|
|
386
386
|
"unlocked_by": "space-age",
|
387
387
|
"uuid": "59d842b4-a804-4cd5-a388-983a22a70c9e"
|
388
388
|
},
|
389
|
+
{
|
390
|
+
"core": false,
|
391
|
+
"difficulty": 4,
|
392
|
+
"slug": "house",
|
393
|
+
"topics": [
|
394
|
+
"control_flow_conditionals",
|
395
|
+
"control_flow_loops",
|
396
|
+
"strings",
|
397
|
+
"arrays",
|
398
|
+
"recursion"
|
399
|
+
],
|
400
|
+
"unlocked_by": "bob",
|
401
|
+
"uuid": "9850a74a-1842-4db0-b3ed-5a53b4f25050"
|
402
|
+
},
|
389
403
|
{
|
390
404
|
"core": false,
|
391
405
|
"difficulty": 5,
|
@@ -910,11 +924,11 @@
|
|
910
924
|
"mathematics",
|
911
925
|
"algorithms"
|
912
926
|
],
|
913
|
-
"unlocked_by":
|
927
|
+
"unlocked_by": null,
|
914
928
|
"uuid": "4439ab9d-266b-483b-b5ca-3920c478fd62"
|
915
929
|
},
|
916
930
|
{
|
917
|
-
"core":
|
931
|
+
"core": true,
|
918
932
|
"difficulty": 5,
|
919
933
|
"slug": "binary-search",
|
920
934
|
"topics": [
|
@@ -1058,7 +1072,7 @@
|
|
1058
1072
|
"loops",
|
1059
1073
|
"transforming"
|
1060
1074
|
],
|
1061
|
-
"unlocked_by": "
|
1075
|
+
"unlocked_by": "pangram",
|
1062
1076
|
"uuid": "50050198-b5a3-4ab1-8b4b-0eadc8007ebb"
|
1063
1077
|
},
|
1064
1078
|
{
|
@@ -1078,4 +1092,4 @@
|
|
1078
1092
|
"foregone": [],
|
1079
1093
|
"language": "TypeScript",
|
1080
1094
|
"test_pattern": ".*[.]test[.]ts$"
|
1081
|
-
}
|
1095
|
+
}
|
@@ -0,0 +1,138 @@
|
|
1
|
+
# House
|
2
|
+
|
3
|
+
Recite the nursery rhyme 'This is the House that Jack Built'.
|
4
|
+
|
5
|
+
> [The] process of placing a phrase of clause within another phrase of
|
6
|
+
> clause is called embedding. It is through the processes of recursion
|
7
|
+
> and embedding that we are able to take a finite number of forms (words
|
8
|
+
> and phrases) and construct an infinite number of expressions.
|
9
|
+
> Furthermore, embedding also allows us to construct an infinitely long
|
10
|
+
> structure, in theory anyway.
|
11
|
+
|
12
|
+
- [papyr.com](http://papyr.com/hypertextbooks/grammar/ph_noun.htm)
|
13
|
+
|
14
|
+
The nursery rhyme reads as follows:
|
15
|
+
|
16
|
+
```text
|
17
|
+
This is the house that Jack built.
|
18
|
+
|
19
|
+
This is the malt
|
20
|
+
that lay in the house that Jack built.
|
21
|
+
|
22
|
+
This is the rat
|
23
|
+
that ate the malt
|
24
|
+
that lay in the house that Jack built.
|
25
|
+
|
26
|
+
This is the cat
|
27
|
+
that killed the rat
|
28
|
+
that ate the malt
|
29
|
+
that lay in the house that Jack built.
|
30
|
+
|
31
|
+
This is the dog
|
32
|
+
that worried the cat
|
33
|
+
that killed the rat
|
34
|
+
that ate the malt
|
35
|
+
that lay in the house that Jack built.
|
36
|
+
|
37
|
+
This is the cow with the crumpled horn
|
38
|
+
that tossed the dog
|
39
|
+
that worried the cat
|
40
|
+
that killed the rat
|
41
|
+
that ate the malt
|
42
|
+
that lay in the house that Jack built.
|
43
|
+
|
44
|
+
This is the maiden all forlorn
|
45
|
+
that milked the cow with the crumpled horn
|
46
|
+
that tossed the dog
|
47
|
+
that worried the cat
|
48
|
+
that killed the rat
|
49
|
+
that ate the malt
|
50
|
+
that lay in the house that Jack built.
|
51
|
+
|
52
|
+
This is the man all tattered and torn
|
53
|
+
that kissed the maiden all forlorn
|
54
|
+
that milked the cow with the crumpled horn
|
55
|
+
that tossed the dog
|
56
|
+
that worried the cat
|
57
|
+
that killed the rat
|
58
|
+
that ate the malt
|
59
|
+
that lay in the house that Jack built.
|
60
|
+
|
61
|
+
This is the priest all shaven and shorn
|
62
|
+
that married the man all tattered and torn
|
63
|
+
that kissed the maiden all forlorn
|
64
|
+
that milked the cow with the crumpled horn
|
65
|
+
that tossed the dog
|
66
|
+
that worried the cat
|
67
|
+
that killed the rat
|
68
|
+
that ate the malt
|
69
|
+
that lay in the house that Jack built.
|
70
|
+
|
71
|
+
This is the rooster that crowed in the morn
|
72
|
+
that woke the priest all shaven and shorn
|
73
|
+
that married the man all tattered and torn
|
74
|
+
that kissed the maiden all forlorn
|
75
|
+
that milked the cow with the crumpled horn
|
76
|
+
that tossed the dog
|
77
|
+
that worried the cat
|
78
|
+
that killed the rat
|
79
|
+
that ate the malt
|
80
|
+
that lay in the house that Jack built.
|
81
|
+
|
82
|
+
This is the farmer sowing his corn
|
83
|
+
that kept the rooster that crowed in the morn
|
84
|
+
that woke the priest all shaven and shorn
|
85
|
+
that married the man all tattered and torn
|
86
|
+
that kissed the maiden all forlorn
|
87
|
+
that milked the cow with the crumpled horn
|
88
|
+
that tossed the dog
|
89
|
+
that worried the cat
|
90
|
+
that killed the rat
|
91
|
+
that ate the malt
|
92
|
+
that lay in the house that Jack built.
|
93
|
+
|
94
|
+
This is the horse and the hound and the horn
|
95
|
+
that belonged to the farmer sowing his corn
|
96
|
+
that kept the rooster that crowed in the morn
|
97
|
+
that woke the priest all shaven and shorn
|
98
|
+
that married the man all tattered and torn
|
99
|
+
that kissed the maiden all forlorn
|
100
|
+
that milked the cow with the crumpled horn
|
101
|
+
that tossed the dog
|
102
|
+
that worried the cat
|
103
|
+
that killed the rat
|
104
|
+
that ate the malt
|
105
|
+
that lay in the house that Jack built.
|
106
|
+
```
|
107
|
+
|
108
|
+
## Setup
|
109
|
+
|
110
|
+
Go through the setup instructions for TypeScript to
|
111
|
+
install the necessary dependencies:
|
112
|
+
|
113
|
+
http://exercism.io/languages/typescript
|
114
|
+
|
115
|
+
## Requirements
|
116
|
+
|
117
|
+
Install assignment dependencies:
|
118
|
+
|
119
|
+
```bash
|
120
|
+
$ yarn install
|
121
|
+
```
|
122
|
+
|
123
|
+
## Making the test suite pass
|
124
|
+
|
125
|
+
Execute the tests with:
|
126
|
+
|
127
|
+
```bash
|
128
|
+
$ yarn test
|
129
|
+
```
|
130
|
+
|
131
|
+
|
132
|
+
|
133
|
+
## Source
|
134
|
+
|
135
|
+
British nursery rhyme [http://en.wikipedia.org/wiki/This_Is_The_House_That_Jack_Built](http://en.wikipedia.org/wiki/This_Is_The_House_That_Jack_Built)
|
136
|
+
|
137
|
+
## Submitting Incomplete Solutions
|
138
|
+
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
@@ -0,0 +1,67 @@
|
|
1
|
+
const OBJECTS = [
|
2
|
+
'house',
|
3
|
+
'malt',
|
4
|
+
'rat',
|
5
|
+
'cat',
|
6
|
+
'dog',
|
7
|
+
'cow with the crumpled horn',
|
8
|
+
'maiden all forlorn',
|
9
|
+
'man all tattered and torn',
|
10
|
+
'priest all shaven and shorn',
|
11
|
+
'rooster that crowed in the morn',
|
12
|
+
'farmer sowing his corn',
|
13
|
+
'horse and the hound and the horn',
|
14
|
+
]
|
15
|
+
|
16
|
+
const ACTIONS = [
|
17
|
+
'Jack built',
|
18
|
+
'lay in',
|
19
|
+
'ate',
|
20
|
+
'killed',
|
21
|
+
'worried',
|
22
|
+
'tossed',
|
23
|
+
'milked',
|
24
|
+
'kissed',
|
25
|
+
'married',
|
26
|
+
'woke',
|
27
|
+
'kept',
|
28
|
+
'belonged to',
|
29
|
+
]
|
30
|
+
|
31
|
+
class House {
|
32
|
+
static verse(verseNumber: number) {
|
33
|
+
const lines = []
|
34
|
+
const totalLines = verseNumber
|
35
|
+
let itemIndex = verseNumber - 1
|
36
|
+
for (let lineNumber = 1; lineNumber <= totalLines; lineNumber += 1) {
|
37
|
+
let lineText = ''
|
38
|
+
if (lineNumber === 1) {
|
39
|
+
lineText += 'This is'
|
40
|
+
} else {
|
41
|
+
lineText += `that ${ACTIONS[itemIndex]}`
|
42
|
+
itemIndex -= 1
|
43
|
+
}
|
44
|
+
|
45
|
+
lineText += ` the ${OBJECTS[itemIndex]}`
|
46
|
+
if (lineNumber === totalLines) {
|
47
|
+
lineText += ` that ${ACTIONS[itemIndex]}.`
|
48
|
+
}
|
49
|
+
lines.push(lineText)
|
50
|
+
}
|
51
|
+
return lines
|
52
|
+
}
|
53
|
+
|
54
|
+
static verses(start: number, end: number) {
|
55
|
+
let lines: string[] = []
|
56
|
+
for (let i = start; i <= end; i += 1) {
|
57
|
+
const verseLines = House.verse(i)
|
58
|
+
lines = lines.concat(verseLines)
|
59
|
+
if (i < end) {
|
60
|
+
lines.push('')
|
61
|
+
}
|
62
|
+
}
|
63
|
+
return lines
|
64
|
+
}
|
65
|
+
}
|
66
|
+
|
67
|
+
export default House
|