trackler 2.2.1.106 → 2.2.1.107
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/delphi/exercises/bowling/uBowlingExample.pas +31 -4
- data/tracks/delphi/exercises/bowling/uBowlingTests.pas +81 -5
- data/tracks/elm/config/exercise_readme.go.tmpl +29 -4
- data/tracks/elm/exercises/accumulate/README.md +0 -3
- data/tracks/elm/exercises/all-your-base/README.md +0 -1
- data/tracks/elm/exercises/allergies/README.md +0 -1
- data/tracks/elm/exercises/atbash-cipher/README.md +2 -1
- data/tracks/elm/exercises/etl/README.md +3 -1
- data/tracks/elm/exercises/grade-school/README.md +0 -1
- data/tracks/elm/exercises/grains/README.md +0 -1
- data/tracks/elm/exercises/leap/README.md +1 -1
- data/tracks/elm/exercises/list-ops/README.md +0 -1
- data/tracks/elm/exercises/nucleotide-count/README.md +8 -22
- data/tracks/elm/exercises/pangram/README.md +1 -1
- data/tracks/elm/exercises/pascals-triangle/README.md +1 -1
- data/tracks/elm/exercises/phone-number/README.md +4 -3
- data/tracks/elm/exercises/rna-transcription/README.md +2 -2
- data/tracks/elm/exercises/roman-numerals/README.md +1 -1
- data/tracks/elm/exercises/run-length-encoding/README.md +4 -4
- data/tracks/elm/exercises/scrabble-score/README.md +3 -1
- data/tracks/elm/exercises/space-age/README.md +1 -1
- data/tracks/elm/exercises/sublist/README.md +0 -1
- data/tracks/elm/exercises/sum-of-multiples/README.md +3 -6
- data/tracks/elm/exercises/triangle/README.md +9 -6
- data/tracks/elm/exercises/word-count/README.md +1 -2
- data/tracks/go/config.json +12 -0
- data/tracks/go/exercises/forth/.meta/gen.go +5 -3
- data/tracks/go/exercises/forth/cases_test.go +2 -2
- data/tracks/go/exercises/grains/.meta/gen.go +10 -8
- data/tracks/go/exercises/grains/cases_test.go +2 -2
- data/tracks/go/exercises/isogram/.meta/gen.go +5 -3
- data/tracks/go/exercises/isogram/cases_test.go +2 -2
- data/tracks/go/exercises/proverb/.meta/gen.go +51 -0
- data/tracks/go/exercises/proverb/README.md +41 -0
- data/tracks/go/exercises/proverb/cases_test.go +44 -0
- data/tracks/go/exercises/proverb/example.go +19 -0
- data/tracks/go/exercises/proverb/proverb.go +15 -0
- data/tracks/go/exercises/proverb/proverb_test.go +23 -0
- data/tracks/julia/exercises/isbn-verifier/example.jl +2 -0
- data/tracks/julia/exercises/isbn-verifier/runtests.jl +4 -4
- data/tracks/rust/exercises/two-bucket/README.md +1 -1
- data/tracks/scala/exercises/bracket-push/src/test/scala/BracketPushTest.scala +17 -15
- data/tracks/scala/exercises/change/src/test/scala/ChangeTest.scala +2 -2
- data/tracks/scala/exercises/collatz-conjecture/src/test/scala/CollatzConjectureTest.scala +2 -2
- data/tracks/scala/exercises/connect/src/test/scala/ConnectTest.scala +1 -1
- data/tracks/scala/exercises/crypto-square/src/test/scala/CryptoSquareTest.scala +20 -41
- data/tracks/scala/exercises/custom-set/src/test/scala/CustomSetTest.scala +58 -40
- data/tracks/scala/exercises/difference-of-squares/src/test/scala/DifferenceOfSquaresTest.scala +1 -1
- data/tracks/scala/testgen/src/main/scala/BracketPushTestGenerator.scala +1 -1
- data/tracks/scala/testgen/src/main/scala/ChangeTestGenerator.scala +3 -3
- data/tracks/scala/testgen/src/main/scala/CollatzConjectureTestGenerator.scala +3 -3
- data/tracks/scala/testgen/src/main/scala/ConnectTestGenerator.scala +6 -6
- data/tracks/scala/testgen/src/main/scala/CryptoSquareTestGenerator.scala +1 -1
- data/tracks/scala/testgen/src/main/scala/CustomSetTestGenerator.scala +32 -26
- data/tracks/scala/testgen/src/main/scala/DifferenceOfSquaresTestGenerator.scala +1 -1
- metadata +8 -3
- data/tracks/elm/docs/EXERCISE_README_INSERT.md +0 -28
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f11bde21663899b9a570b97621e391aa62e5f379
|
4
|
+
data.tar.gz: 8480dc1e43e611925e76989d561e0e19ea28cefb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e6c6211c8f2f91615e89d35a0cf2b3fb6d993d35baa4106ed91f2c419827bb68768b7e4330879e20497ea9f5da663d6ee7b1832080bd35098a401d97b8d176b0
|
7
|
+
data.tar.gz: 8474814afc978a6120f745e9857a2b3b294074b6926cecf6e10917df0af891ac7d9517837dfbcf229560cb031ff9d7afe89751fa85e667b51dd5c78e9221e1cb
|
data/lib/trackler/version.rb
CHANGED
@@ -5,7 +5,7 @@ interface
|
|
5
5
|
type
|
6
6
|
IBowlingGame = interface(IInvokable)
|
7
7
|
['{D4A292B6-BC15-48ED-AE04-2D34759017CB}']
|
8
|
-
|
8
|
+
function Roll(aPins: integer): Boolean;
|
9
9
|
function Score: integer;
|
10
10
|
end;
|
11
11
|
|
@@ -28,10 +28,11 @@ type
|
|
28
28
|
function SpareBonus(aFrameIndex: integer): integer;
|
29
29
|
function SumOfPinsInFrame(aFrameIndex: integer): integer;
|
30
30
|
function CorrectNumberOfRolls(aFrameIndex: integer): boolean;
|
31
|
+
function ValidInput(aPin: integer): Boolean;
|
31
32
|
public
|
32
33
|
constructor create;
|
33
34
|
function Score: integer;
|
34
|
-
|
35
|
+
function Roll(aPins: integer): Boolean;
|
35
36
|
end;
|
36
37
|
|
37
38
|
function NewBowlingGame: IBowlingGame;
|
@@ -44,8 +45,11 @@ begin
|
|
44
45
|
fRolls := TList<integer>.Create;
|
45
46
|
end;
|
46
47
|
|
47
|
-
|
48
|
+
function TBowlingGame.Roll(aPins: Integer): Boolean;
|
48
49
|
begin
|
50
|
+
if not ValidInput(aPins) then
|
51
|
+
exit(false);
|
52
|
+
|
49
53
|
fRolls.Add(aPins);
|
50
54
|
end;
|
51
55
|
|
@@ -59,6 +63,8 @@ begin
|
|
59
63
|
lScore := 0;
|
60
64
|
lFrameIndex := 0;
|
61
65
|
try
|
66
|
+
if (fRolls.Count < 12) or (fRolls.Count > 21) then
|
67
|
+
raise EArgumentException.Create('Not a proper game');
|
62
68
|
for i := 1 to fNumberOfFrames do
|
63
69
|
begin
|
64
70
|
if fRolls.Count <= lFrameIndex then
|
@@ -70,7 +76,7 @@ begin
|
|
70
76
|
raise EArgumentException.Create('Not a proper game');
|
71
77
|
|
72
78
|
lStrikeBonus := StrikeBonus(lFrameIndex);
|
73
|
-
if (lStrikeBonus > fMaximumFrameScore) and not IsStrike(lFrameIndex + 1) then
|
79
|
+
if (lStrikeBonus > fMaximumFrameScore) and not IsStrike(lFrameIndex + 1) or (lStrikeBonus > 20) then
|
74
80
|
raise EArgumentException.Create('Not a proper game');
|
75
81
|
|
76
82
|
lScore := lScore + 10 + lStrikeBonus;
|
@@ -126,6 +132,27 @@ begin
|
|
126
132
|
result := fRolls[aFrameIndex] + fRolls[aFrameIndex + 1];
|
127
133
|
end;
|
128
134
|
|
135
|
+
function TBowlingGame.ValidInput(aPin: integer): Boolean;
|
136
|
+
begin
|
137
|
+
result := true;
|
138
|
+
if (fRolls.Count >= 21) or (aPin < 0) or (aPin > 10) or
|
139
|
+
((fRolls.Count + 1) mod 2 = 0) and (fRolls[fRolls.Count - 1] <> 10) and ((fRolls[fRolls.Count - 1] + aPin) > 10) then
|
140
|
+
exit(false);
|
141
|
+
|
142
|
+
if (fRolls.Count = 20) then
|
143
|
+
begin
|
144
|
+
if (fRolls[18] <> 10) and (fRolls[18] + fRolls[19] <> 10) then
|
145
|
+
exit(false);
|
146
|
+
|
147
|
+
if (aPin = 10) and ((fRolls[18] <> 10) or (fRolls[19] <> 10) or (fRolls[19] + aPin > 10) and (fRolls[19] + aPin <> 20)) and
|
148
|
+
(fRolls[18] + fRolls[19] <> 10) then
|
149
|
+
exit(false);
|
150
|
+
|
151
|
+
if (aPin <> 10) and (fRolls[19] + aPin > 10) and (fRolls[19] <> 10) then
|
152
|
+
exit(false);
|
153
|
+
end;
|
154
|
+
end;
|
155
|
+
|
129
156
|
function TBowlingGame.CorrectNumberOfRolls(aFrameIndex: Integer): boolean;
|
130
157
|
begin
|
131
158
|
result := aFrameIndex = fRolls.Count;
|
@@ -5,6 +5,9 @@ uses
|
|
5
5
|
DUnitX.TestFramework,
|
6
6
|
uBowling;
|
7
7
|
|
8
|
+
const
|
9
|
+
CanonicalVersion = '1.2.0';
|
10
|
+
|
8
11
|
type
|
9
12
|
|
10
13
|
[TestFixture]
|
@@ -13,7 +16,7 @@ type
|
|
13
16
|
class function RollMany(pins: array of integer; game: IBowlingGame): IBowlingGame; static;
|
14
17
|
public
|
15
18
|
[Test]
|
16
|
-
//
|
19
|
+
// [Ignore('Comment the "[Ignore]" statement to run the test')]
|
17
20
|
procedure Should_be_able_to_score_a_game_with_all_zeros;
|
18
21
|
|
19
22
|
[Test]
|
@@ -80,10 +83,26 @@ type
|
|
80
83
|
[Ignore]
|
81
84
|
procedure Two_rolls_in_a_frame_cannot_score_more_than_10_points;
|
82
85
|
|
86
|
+
[Test]
|
87
|
+
[Ignore]
|
88
|
+
procedure Bonus_roll_after_a_strike_in_the_last_frame_cannot_score_more_than_10_points;
|
89
|
+
|
83
90
|
[Test]
|
84
91
|
[Ignore]
|
85
92
|
procedure Two_bonus_rolls_after_a_strike_in_the_last_frame_cannot_score_more_than_10_points;
|
86
93
|
|
94
|
+
[Test]
|
95
|
+
[Ignore]
|
96
|
+
procedure Two_bonus_rolls_after_a_strike_in_the_last_frame_can_score_more_than_10_points_if_one_is_a_strike;
|
97
|
+
|
98
|
+
[Test]
|
99
|
+
[Ignore]
|
100
|
+
procedure The_second_bonus_rolls_after_a_strike_in_the_last_frame_cannot_be_a_strike_if_the_first_one_is_not_a_strike;
|
101
|
+
|
102
|
+
[Test]
|
103
|
+
[Ignore]
|
104
|
+
procedure Second_bonus_roll_after_a_strike_in_the_last_frame_cannot_score_more_than_10_points;
|
105
|
+
|
87
106
|
[Test]
|
88
107
|
[Ignore]
|
89
108
|
procedure An_unstarted_game_cannot_be_scored;
|
@@ -94,7 +113,7 @@ type
|
|
94
113
|
|
95
114
|
[Test]
|
96
115
|
[Ignore]
|
97
|
-
procedure
|
116
|
+
procedure Cannot_roll_if_game_already_has_ten_frames;
|
98
117
|
|
99
118
|
[Test]
|
100
119
|
[Ignore]
|
@@ -107,11 +126,26 @@ type
|
|
107
126
|
[Test]
|
108
127
|
[Ignore]
|
109
128
|
procedure Bonus_roll_for_a_spare_in_the_last_frame_must_be_rolled_before_score_can_be_calculated;
|
129
|
+
|
130
|
+
[Test]
|
131
|
+
[Ignore]
|
132
|
+
procedure Cannot_roll_after_bonus_roll_for_spare;
|
133
|
+
|
134
|
+
[Test]
|
135
|
+
[Ignore]
|
136
|
+
procedure Cannot_roll_after_bonus_rolls_for_strike;
|
110
137
|
end;
|
111
138
|
|
112
139
|
implementation
|
113
140
|
uses System.SysUtils;
|
114
141
|
|
142
|
+
procedure BowlingTests.Second_bonus_roll_after_a_strike_in_the_last_frame_cannot_score_more_than_10_points;
|
143
|
+
var game: IBowlingGame;
|
144
|
+
begin
|
145
|
+
game := RollMany([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10], NewBowlingGame);
|
146
|
+
Assert.IsFalse(game.Roll(11));
|
147
|
+
end;
|
148
|
+
|
115
149
|
procedure BowlingTests.Should_be_able_to_score_a_game_with_all_zeros;
|
116
150
|
var game: IBowlingGame;
|
117
151
|
begin
|
@@ -231,6 +265,13 @@ begin
|
|
231
265
|
Assert.AreEqual(-1, game.Score);
|
232
266
|
end;
|
233
267
|
|
268
|
+
procedure BowlingTests.The_second_bonus_rolls_after_a_strike_in_the_last_frame_cannot_be_a_strike_if_the_first_one_is_not_a_strike;
|
269
|
+
var game: IBowlingGame;
|
270
|
+
begin
|
271
|
+
game := RollMany([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 6], NewBowlingGame);
|
272
|
+
Assert.IsFalse(game.Roll(10));
|
273
|
+
end;
|
274
|
+
|
234
275
|
procedure BowlingTests.Two_bonus_rolls_after_a_strike_in_the_last_frame_cannot_score_more_than_10_points;
|
235
276
|
var game: IBowlingGame;
|
236
277
|
begin
|
@@ -238,6 +279,13 @@ begin
|
|
238
279
|
Assert.AreEqual(-1, game.Score);
|
239
280
|
end;
|
240
281
|
|
282
|
+
procedure BowlingTests.Two_bonus_rolls_after_a_strike_in_the_last_frame_can_score_more_than_10_points_if_one_is_a_strike;
|
283
|
+
var game: IBowlingGame;
|
284
|
+
begin
|
285
|
+
game := RollMany([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 6], NewBowlingGame);
|
286
|
+
Assert.AreEqual(26, game.Score);
|
287
|
+
end;
|
288
|
+
|
241
289
|
procedure BowlingTests.An_unstarted_game_cannot_be_scored;
|
242
290
|
var game: IBowlingGame;
|
243
291
|
begin
|
@@ -252,11 +300,25 @@ begin
|
|
252
300
|
Assert.AreEqual(-1, game.Score);
|
253
301
|
end;
|
254
302
|
|
255
|
-
procedure BowlingTests.
|
303
|
+
procedure BowlingTests.Cannot_roll_after_bonus_rolls_for_strike;
|
256
304
|
var game: IBowlingGame;
|
257
305
|
begin
|
258
|
-
game := RollMany([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
259
|
-
Assert.
|
306
|
+
game := RollMany([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 3, 2], NewBowlingGame);
|
307
|
+
Assert.IsFalse(game.Roll(2));
|
308
|
+
end;
|
309
|
+
|
310
|
+
procedure BowlingTests.Cannot_roll_after_bonus_roll_for_spare;
|
311
|
+
var game: IBowlingGame;
|
312
|
+
begin
|
313
|
+
game := RollMany([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 3, 2], NewBowlingGame);
|
314
|
+
Assert.IsFalse(game.Roll(2));
|
315
|
+
end;
|
316
|
+
|
317
|
+
procedure BowlingTests.Cannot_roll_if_game_already_has_ten_frames;
|
318
|
+
var game: IBowlingGame;
|
319
|
+
begin
|
320
|
+
game := RollMany([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], NewBowlingGame);
|
321
|
+
Assert.IsFalse(game.Roll(0));
|
260
322
|
end;
|
261
323
|
|
262
324
|
procedure BowlingTests.Bonus_rolls_for_a_strike_in_the_last_frame_must_be_rolled_before_score_can_be_calculated;
|
@@ -273,6 +335,20 @@ begin
|
|
273
335
|
Assert.AreEqual(-1, game.Score);
|
274
336
|
end;
|
275
337
|
|
338
|
+
procedure BowlingTests.Bonus_roll_after_a_strike_in_the_last_frame_cannot_score_more_than_10_points;
|
339
|
+
var game: IBowlingGame;
|
340
|
+
begin
|
341
|
+
game := RollMany([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10], NewBowlingGame);
|
342
|
+
Assert.IsFalse(game.Roll(11));
|
343
|
+
(*{
|
344
|
+
var sut = new BowlingGame();
|
345
|
+
var previousRolls = new int[] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10};
|
346
|
+
DoRoll(previousRolls, sut);
|
347
|
+
Assert.Throws<ArgumentException>(() => sut.Roll(11));
|
348
|
+
} (**)
|
349
|
+
|
350
|
+
end;
|
351
|
+
|
276
352
|
procedure BowlingTests.Bonus_roll_for_a_spare_in_the_last_frame_must_be_rolled_before_score_can_be_calculated;
|
277
353
|
var game: IBowlingGame;
|
278
354
|
begin
|
@@ -4,10 +4,35 @@
|
|
4
4
|
{{- with .Hints }}
|
5
5
|
{{ . }}
|
6
6
|
{{ end }}
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
7
|
+
## Elm Installation
|
8
|
+
|
9
|
+
Refer to the [Exercism help page](http://exercism.io/languages/elm) for Elm
|
10
|
+
installation and learning resources.
|
11
|
+
|
12
|
+
## Writing the Code
|
13
|
+
|
14
|
+
The first time you start an exercise, you'll need to ensure you have the
|
15
|
+
appropriate dependencies installed.
|
16
|
+
|
17
|
+
```bash
|
18
|
+
$ npm install
|
19
|
+
```
|
20
|
+
|
21
|
+
Execute the tests with:
|
22
|
+
|
23
|
+
```bash
|
24
|
+
$ npm test
|
25
|
+
```
|
26
|
+
|
27
|
+
Automatically run tests again when you save changes:
|
28
|
+
|
29
|
+
```bash
|
30
|
+
$ npm run watch
|
31
|
+
```
|
32
|
+
|
33
|
+
As you work your way through the test suite, be sure to remove the `skip <|`
|
34
|
+
calls from each test until you get them all passing!
|
35
|
+
{{ with .Spec.Credits }}
|
11
36
|
## Source
|
12
37
|
|
13
38
|
{{ . }}
|
@@ -25,9 +25,6 @@ Keep your hands off that collect/map/fmap/whatchamacallit functionality
|
|
25
25
|
provided by your standard library!
|
26
26
|
Solve this one yourself using other basic tools instead.
|
27
27
|
|
28
|
-
Lisp specific: it's perfectly fine to use `MAPCAR` or the equivalent,
|
29
|
-
as this is idiomatic Lisp, not a library function.
|
30
|
-
|
31
28
|
## Elm Installation
|
32
29
|
|
33
30
|
Refer to the [Exercism help page](http://exercism.io/languages/elm) for Elm
|
@@ -60,6 +60,5 @@ $ npm run watch
|
|
60
60
|
As you work your way through the test suite, be sure to remove the `skip <|`
|
61
61
|
calls from each test until you get them all passing!
|
62
62
|
|
63
|
-
|
64
63
|
## Submitting Incomplete Solutions
|
65
64
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
@@ -29,7 +29,6 @@ allergens that score 256, 512, 1024, etc.). Your program should
|
|
29
29
|
ignore those components of the score. For example, if the allergy
|
30
30
|
score is 257, your program should only report the eggs (1) allergy.
|
31
31
|
|
32
|
-
|
33
32
|
## Elm Installation
|
34
33
|
|
35
34
|
Refer to the [Exercism help page](http://exercism.io/languages/elm) for Elm
|
@@ -9,7 +9,7 @@ letter, the second with the second-last, and so on.
|
|
9
9
|
|
10
10
|
An Atbash cipher for the Latin alphabet would be as follows:
|
11
11
|
|
12
|
-
```
|
12
|
+
```text
|
13
13
|
Plain: abcdefghijklmnopqrstuvwxyz
|
14
14
|
Cipher: zyxwvutsrqponmlkjihgfedcba
|
15
15
|
```
|
@@ -23,6 +23,7 @@ being 5 letters, and punctuation is excluded. This is to make it harder to guess
|
|
23
23
|
things based on word boundaries.
|
24
24
|
|
25
25
|
## Examples
|
26
|
+
|
26
27
|
- Encoding `test` gives `gvhg`
|
27
28
|
- Decoding `gvhg` gives `test`
|
28
29
|
- Decoding `gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt` gives `thequickbrownfoxjumpsoverthelazydog`
|
@@ -1,8 +1,9 @@
|
|
1
|
-
#
|
1
|
+
# ETL
|
2
2
|
|
3
3
|
We are going to do the `Transform` step of an Extract-Transform-Load.
|
4
4
|
|
5
5
|
### ETL
|
6
|
+
|
6
7
|
Extract-Transform-Load (ETL) is a fancy way of saying, "We have some crufty, legacy data over in this system, and now we need it in this shiny new system over here, so
|
7
8
|
we're going to migrate this."
|
8
9
|
|
@@ -11,6 +12,7 @@ once." That's then typically followed by much forehead slapping and
|
|
11
12
|
moaning about how stupid we could possibly be.)
|
12
13
|
|
13
14
|
### The goal
|
15
|
+
|
14
16
|
We're going to extract some scrabble scores from a legacy system.
|
15
17
|
|
16
18
|
The old system stored a list of letters per score:
|
@@ -4,7 +4,7 @@ Given a year, report if it is a leap year.
|
|
4
4
|
|
5
5
|
The tricky thing here is that a leap year in the Gregorian calendar occurs:
|
6
6
|
|
7
|
-
```
|
7
|
+
```text
|
8
8
|
on every year that is evenly divisible by 4
|
9
9
|
except every year that is evenly divisible by 100
|
10
10
|
unless the year is also evenly divisible by 400
|
@@ -35,6 +35,5 @@ $ npm run watch
|
|
35
35
|
As you work your way through the test suite, be sure to remove the `skip <|`
|
36
36
|
calls from each test until you get them all passing!
|
37
37
|
|
38
|
-
|
39
38
|
## Submitting Incomplete Solutions
|
40
39
|
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
|
@@ -1,30 +1,16 @@
|
|
1
1
|
# Nucleotide Count
|
2
2
|
|
3
|
-
Given a DNA string, compute how many times each nucleotide occurs in the string.
|
3
|
+
Given a single stranded DNA string, compute how many times each nucleotide occurs in the string.
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
Each symbol represents a nucleotide, which is a fancy name for the
|
9
|
-
particular molecules that happen to make up a large part of DNA.
|
10
|
-
|
11
|
-
Shortest intro to biochemistry EVAR:
|
5
|
+
The genetic language of every living thing on the planet is DNA.
|
6
|
+
DNA is a large molecule that is built from an extremely long sequence of individual elements called nucleotides.
|
7
|
+
4 types exist in DNA and these differ only slightly and can be represented as the following symbols: 'A' for adenine, 'C' for cytosine, 'G' for guanine, and 'T' thymine.
|
12
8
|
|
9
|
+
Here is an analogy:
|
13
10
|
- twigs are to birds nests as
|
14
|
-
- nucleotides are to DNA
|
15
|
-
-
|
16
|
-
-
|
17
|
-
- oh crap lipids
|
18
|
-
|
19
|
-
I'm not going to talk about lipids because they're crazy complex.
|
20
|
-
|
21
|
-
So back to nucleotides.
|
22
|
-
|
23
|
-
DNA contains four types of them: adenine (`A`), cytosine (`C`), guanine
|
24
|
-
(`G`), and thymine (`T`).
|
25
|
-
|
26
|
-
RNA contains a slightly different set of nucleotides, but we don't care
|
27
|
-
about that for now.
|
11
|
+
- nucleotides are to DNA as
|
12
|
+
- legos are to lego houses as
|
13
|
+
- words are to sentences as...
|
28
14
|
|
29
15
|
## Elm Installation
|
30
16
|
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Determine if a sentence is a pangram. A pangram (Greek: παν γράμμα, pan gramma,
|
4
4
|
"every letter") is a sentence using every letter of the alphabet at least once.
|
5
|
-
The best known English pangram is:
|
5
|
+
The best known English pangram is:
|
6
6
|
> The quick brown fox jumps over the lazy dog.
|
7
7
|
|
8
8
|
The alphabet used consists of ASCII letters `a` to `z`, inclusive, and is case
|