trackler 2.1.0.40 → 2.1.0.41
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/bin/update +3 -3
- data/common/exercises/bowling/canonical-data.json +10 -10
- data/lib/trackler/version.rb +1 -1
- data/tracks/delphi/config.json +9 -0
- data/tracks/delphi/exercises/collatz-conjecture/Collatzconjecture.dpr +60 -0
- data/tracks/delphi/exercises/collatz-conjecture/uCollatzconjectureExample.pas +35 -0
- data/tracks/delphi/exercises/collatz-conjecture/uCollatzconjectureTest.pas +83 -0
- data/tracks/java/exercises/acronym/src/main/java/Acronym.java +1 -1
- data/tracks/java/exercises/all-your-base/src/main/java/BaseConverter.java +1 -1
- data/tracks/java/exercises/bracket-push/src/main/java/BracketChecker.java +1 -1
- data/tracks/java/exercises/change/src/main/java/ChangeCalculator.java +1 -1
- data/tracks/java/exercises/diamond/src/main/java/DiamondPrinter.java +1 -1
- data/tracks/java/exercises/flatten-array/src/main/java/Flattener.java +1 -1
- data/tracks/java/exercises/luhn/src/main/java/LuhnValidator.java +1 -1
- data/tracks/java/exercises/minesweeper/src/main/java/MinesweeperBoard.java +1 -1
- data/tracks/java/exercises/ocr-numbers/src/main/java/OpticalCharacterReader.java +1 -1
- data/tracks/java/exercises/perfect-numbers/src/main/java/NaturalNumber.java +1 -1
- data/tracks/java/exercises/queen-attack/src/main/java/BoardCoordinate.java +1 -1
- data/tracks/java/exercises/queen-attack/src/main/java/QueenAttackCalculator.java +1 -1
- data/tracks/java/exercises/rectangles/src/main/java/RectangleCounter.java +1 -1
- data/tracks/java/exercises/robot-simulator/src/main/java/GridPosition.java +1 -1
- data/tracks/java/exercises/robot-simulator/src/main/java/Robot.java +1 -1
- data/tracks/java/exercises/saddle-points/src/main/java/Matrix.java +1 -1
- data/tracks/java/exercises/saddle-points/src/main/java/MatrixCoordinate.java +1 -1
- data/tracks/java/exercises/scrabble-score/src/main/java/Scrabble.java +1 -1
- data/tracks/java/exercises/secret-handshake/src/main/java/HandshakeCalculator.java +1 -1
- data/tracks/java/exercises/sublist/src/main/java/RelationshipComputer.java +1 -1
- data/tracks/java/exercises/wordy/src/main/java/WordProblemSolver.java +1 -1
- data/tracks/vbnet/config.json +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 459eb1c7e1f02ca9820277f1b0c2d702b6eff98f
|
4
|
+
data.tar.gz: 9aa711fe94d135c348739c92dbe9cbc6705a8f56
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 708eaabff40770358ec9088fd995750a7fbf1a82c0f4af9262b66db028ad747287ed411dbdd5e3ccb644243551706d3961dede0824bc567a0cd32ec33cb76b18
|
7
|
+
data.tar.gz: dff6a0a9f1eae6c6da446a08701d3105441ee311309348afc528fa673d0e8b00dd756f2c91cac35320816ac4b65aa953ac497f8f518a677c4fd68c48a337d462
|
data/bin/update
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"exercise": "bowling",
|
3
|
-
"version": "1.0.
|
3
|
+
"version": "1.0.1",
|
4
4
|
"comments": [
|
5
5
|
"Students should implement roll and score methods.",
|
6
6
|
"Roll should accept a single integer.",
|
@@ -91,31 +91,31 @@
|
|
91
91
|
"previous_rolls": [10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10],
|
92
92
|
"expected": 300
|
93
93
|
}, {
|
94
|
-
"description": "rolls
|
94
|
+
"description": "rolls cannot score negative points",
|
95
95
|
"property": "roll",
|
96
96
|
"previous_rolls": [],
|
97
97
|
"roll": -1,
|
98
98
|
"expected": {"error": "Negative roll is invalid"}
|
99
99
|
}, {
|
100
|
-
"description": "a roll
|
100
|
+
"description": "a roll cannot score more than 10 points",
|
101
101
|
"property": "roll",
|
102
102
|
"previous_rolls": [],
|
103
103
|
"roll": 11,
|
104
104
|
"expected": {"error": "Pin count exceeds pins on the lane"}
|
105
105
|
}, {
|
106
|
-
"description": "two rolls in a frame
|
106
|
+
"description": "two rolls in a frame cannot score more than 10 points",
|
107
107
|
"property": "roll",
|
108
108
|
"previous_rolls": [5],
|
109
109
|
"roll": 6,
|
110
110
|
"expected": {"error": "Pin count exceeds pins on the lane"}
|
111
111
|
}, {
|
112
|
-
"description": "bonus roll after a strike in the last frame
|
112
|
+
"description": "bonus roll after a strike in the last frame cannot score more than 10 points",
|
113
113
|
"property": "roll",
|
114
114
|
"previous_rolls": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10],
|
115
115
|
"roll": 11,
|
116
116
|
"expected": {"error": "Pin count exceeds pins on the lane"}
|
117
117
|
}, {
|
118
|
-
"description": "two bonus rolls after a strike in the last frame
|
118
|
+
"description": "two bonus rolls after a strike in the last frame cannot score more than 10 points",
|
119
119
|
"property": "roll",
|
120
120
|
"previous_rolls": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 5],
|
121
121
|
"roll": 6,
|
@@ -126,24 +126,24 @@
|
|
126
126
|
"previous_rolls": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 6],
|
127
127
|
"expected": 26
|
128
128
|
}, {
|
129
|
-
"description": "the second bonus rolls after a strike in the last frame
|
129
|
+
"description": "the second bonus rolls after a strike in the last frame cannot be a strike if the first one is not a strike",
|
130
130
|
"property": "roll",
|
131
131
|
"previous_rolls": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 6],
|
132
132
|
"roll": 10,
|
133
133
|
"expected": {"error": "Pin count exceeds pins on the lane"}
|
134
134
|
}, {
|
135
|
-
"description": "second bonus roll after a strike in the last frame
|
135
|
+
"description": "second bonus roll after a strike in the last frame cannot score more than 10 points",
|
136
136
|
"property": "roll",
|
137
137
|
"previous_rolls": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10],
|
138
138
|
"roll": 11,
|
139
139
|
"expected": {"error": "Pin count exceeds pins on the lane"}
|
140
140
|
}, {
|
141
|
-
"description": "an unstarted game
|
141
|
+
"description": "an unstarted game cannot be scored",
|
142
142
|
"property": "score",
|
143
143
|
"previous_rolls": [],
|
144
144
|
"expected": {"error": "Score cannot be taken until the end of the game"}
|
145
145
|
}, {
|
146
|
-
"description": "an incomplete game
|
146
|
+
"description": "an incomplete game cannot be scored",
|
147
147
|
"property": "score",
|
148
148
|
"previous_rolls": [0, 0],
|
149
149
|
"expected": {"error": "Score cannot be taken until the end of the game"}
|
data/lib/trackler/version.rb
CHANGED
data/tracks/delphi/config.json
CHANGED
@@ -0,0 +1,60 @@
|
|
1
|
+
program Collatzconjecture;
|
2
|
+
|
3
|
+
{$IFNDEF TESTINSIGHT}
|
4
|
+
{$APPTYPE CONSOLE}
|
5
|
+
{$ENDIF}{$STRONGLINKTYPES ON}
|
6
|
+
uses
|
7
|
+
System.SysUtils,
|
8
|
+
{$IFDEF TESTINSIGHT}
|
9
|
+
TestInsight.DUnitX,
|
10
|
+
{$ENDIF }
|
11
|
+
DUnitX.Loggers.Console,
|
12
|
+
DUnitX.Loggers.Xml.NUnit,
|
13
|
+
DUnitX.TestFramework,
|
14
|
+
uCollatzconjectureTest in 'uCollatzconjectureTest.pas',
|
15
|
+
uCollatzconjecture in 'uCollatzconjecture.pas';
|
16
|
+
|
17
|
+
var
|
18
|
+
runner : ITestRunner;
|
19
|
+
results : IRunResults;
|
20
|
+
logger : ITestLogger;
|
21
|
+
nunitLogger : ITestLogger;
|
22
|
+
begin
|
23
|
+
{$IFDEF TESTINSIGHT}
|
24
|
+
TestInsight.DUnitX.RunRegisteredTests;
|
25
|
+
exit;
|
26
|
+
{$ENDIF}
|
27
|
+
try
|
28
|
+
//Check command line options, will exit if invalid
|
29
|
+
TDUnitX.CheckCommandLine;
|
30
|
+
//Create the test runner
|
31
|
+
runner := TDUnitX.CreateRunner;
|
32
|
+
//Tell the runner to use RTTI to find Fixtures
|
33
|
+
runner.UseRTTI := True;
|
34
|
+
//tell the runner how we will log things
|
35
|
+
//Log to the console window
|
36
|
+
logger := TDUnitXConsoleLogger.Create(true);
|
37
|
+
runner.AddLogger(logger);
|
38
|
+
//Generate an NUnit compatible XML File
|
39
|
+
nunitLogger := TDUnitXXMLNUnitFileLogger.Create(TDUnitX.Options.XMLOutputFile);
|
40
|
+
runner.AddLogger(nunitLogger);
|
41
|
+
runner.FailsOnNoAsserts := False; //When true, Assertions must be made during tests;
|
42
|
+
|
43
|
+
//Run tests
|
44
|
+
results := runner.Execute;
|
45
|
+
if not results.AllPassed then
|
46
|
+
System.ExitCode := EXIT_ERRORS;
|
47
|
+
|
48
|
+
{$IFNDEF CI}
|
49
|
+
//We don't want this happening when running under CI.
|
50
|
+
if TDUnitX.Options.ExitBehavior = TDUnitXExitBehavior.Pause then
|
51
|
+
begin
|
52
|
+
System.Write('Done.. press <Enter> key to quit.');
|
53
|
+
System.Readln;
|
54
|
+
end;
|
55
|
+
{$ENDIF}
|
56
|
+
except
|
57
|
+
on E: Exception do
|
58
|
+
System.Writeln(E.ClassName, ': ', E.Message);
|
59
|
+
end;
|
60
|
+
end.
|
@@ -0,0 +1,35 @@
|
|
1
|
+
unit uCollatzconjecture;
|
2
|
+
|
3
|
+
interface
|
4
|
+
uses System.SysUtils;
|
5
|
+
|
6
|
+
type
|
7
|
+
EIllegalNumber = class(Exception);
|
8
|
+
|
9
|
+
function collatzSteps(aNumber: integer): integer;
|
10
|
+
|
11
|
+
implementation
|
12
|
+
|
13
|
+
function collatzSteps(aNumber: integer): integer;
|
14
|
+
|
15
|
+
function computeCollatzValue(aValue: integer): integer;
|
16
|
+
begin
|
17
|
+
if odd(aValue) then
|
18
|
+
result := aValue * 3 + 1
|
19
|
+
else
|
20
|
+
result := aValue div 2;
|
21
|
+
end;
|
22
|
+
|
23
|
+
begin
|
24
|
+
if aNumber <= 0 then
|
25
|
+
raise EIllegalNumber.Create('error: Only positive numbers are allowed');
|
26
|
+
|
27
|
+
result := 0;
|
28
|
+
while (aNumber > 1) and (result < 1000) do
|
29
|
+
begin
|
30
|
+
aNumber := computeCollatzValue(aNumber);
|
31
|
+
inc(result);
|
32
|
+
end;
|
33
|
+
end;
|
34
|
+
|
35
|
+
end.
|
@@ -0,0 +1,83 @@
|
|
1
|
+
unit uCollatzconjectureTest;
|
2
|
+
|
3
|
+
interface
|
4
|
+
uses
|
5
|
+
DUnitX.TestFramework;
|
6
|
+
|
7
|
+
type
|
8
|
+
[TestFixture]
|
9
|
+
CollatzconjectureTest = class(TObject)
|
10
|
+
public
|
11
|
+
[Testcase('Zero steps for one', '1, 0')]
|
12
|
+
// [Ignore('Comment the "[Ignore]" statement to run the test')]
|
13
|
+
procedure Zero_steps_for_one(const aNumber: integer; const aExpected: integer);
|
14
|
+
|
15
|
+
[Testcase('Divide if even','16, 4')]
|
16
|
+
[Ignore]
|
17
|
+
procedure Divide_if_even(const aNumber: integer; const aExpected: integer);
|
18
|
+
|
19
|
+
[Testcase('Even and odd steps','12, 9')]
|
20
|
+
[Ignore]
|
21
|
+
procedure Even_and_odd_steps(const aNumber: integer; const aExpected: integer);
|
22
|
+
|
23
|
+
[Testcase('Large number of even and odd steps', '1000000, 152')]
|
24
|
+
[Ignore]
|
25
|
+
procedure Large_number_of_even_and_odd_steps(const aNumber: integer; const aExpected: integer);
|
26
|
+
|
27
|
+
[Testcase('Zero is an error', '0,error: Only positive numbers are allowed')]
|
28
|
+
[Ignore]
|
29
|
+
procedure Zero_is_an_error(const aNumber: integer; const aExpected: string);
|
30
|
+
|
31
|
+
[Testcase('Negative value is an error', '-15,error: Only positive numbers are allowed')]
|
32
|
+
[Ignore]
|
33
|
+
procedure Negative_value_is_an_error(const aNumber: integer; const aExpected: string);
|
34
|
+
end;
|
35
|
+
|
36
|
+
implementation
|
37
|
+
uses uCollatzconjecture;
|
38
|
+
|
39
|
+
procedure CollatzconjectureTest.Zero_steps_for_one(const aNumber: integer; const aExpected: integer);
|
40
|
+
begin
|
41
|
+
Assert.AreEqual(aExpected, collatzSteps(aNumber));
|
42
|
+
end;
|
43
|
+
|
44
|
+
procedure CollatzconjectureTest.Divide_if_even(const aNumber: integer; const aExpected: integer);
|
45
|
+
begin
|
46
|
+
Assert.AreEqual(aExpected, collatzSteps(aNumber));
|
47
|
+
end;
|
48
|
+
|
49
|
+
procedure CollatzconjectureTest.Even_and_odd_steps(const aNumber: integer; const aExpected: integer);
|
50
|
+
begin
|
51
|
+
Assert.AreEqual(aExpected, collatzSteps(aNumber));
|
52
|
+
end;
|
53
|
+
|
54
|
+
procedure CollatzconjectureTest.Large_number_of_even_and_odd_steps(const aNumber: integer; const aExpected: integer);
|
55
|
+
begin
|
56
|
+
Assert.AreEqual(aExpected, collatzSteps(aNumber));
|
57
|
+
end;
|
58
|
+
|
59
|
+
procedure CollatzconjectureTest.Zero_is_an_error(const aNumber: integer; const aExpected: string);
|
60
|
+
var MyProc: TTestLocalMethod;
|
61
|
+
begin
|
62
|
+
MyProc := procedure
|
63
|
+
begin
|
64
|
+
collatzSteps(aNumber);
|
65
|
+
end;
|
66
|
+
|
67
|
+
Assert.WillRaiseWithMessage(MyProc, EIllegalNumber, aExpected);
|
68
|
+
end;
|
69
|
+
|
70
|
+
procedure CollatzconjectureTest.Negative_value_is_an_error(const aNumber: integer; const aExpected: string);
|
71
|
+
var MyProc: TTestLocalMethod;
|
72
|
+
begin
|
73
|
+
MyProc := procedure
|
74
|
+
begin
|
75
|
+
collatzSteps(aNumber);
|
76
|
+
end;
|
77
|
+
|
78
|
+
Assert.WillRaiseWithMessage(MyProc, EIllegalNumber, aExpected);
|
79
|
+
end;
|
80
|
+
|
81
|
+
initialization
|
82
|
+
TDUnitX.RegisterTestFixture(CollatzconjectureTest);
|
83
|
+
end.
|
data/tracks/vbnet/config.json
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: trackler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.0.
|
4
|
+
version: 2.1.0.41
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Katrina Owen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-06-
|
11
|
+
date: 2017-06-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubyzip
|
@@ -2036,6 +2036,9 @@ files:
|
|
2036
2036
|
- tracks/delphi/exercises/clock/Clock.dpr
|
2037
2037
|
- tracks/delphi/exercises/clock/uClockExample.pas
|
2038
2038
|
- tracks/delphi/exercises/clock/uClockTest.pas
|
2039
|
+
- tracks/delphi/exercises/collatz-conjecture/Collatzconjecture.dpr
|
2040
|
+
- tracks/delphi/exercises/collatz-conjecture/uCollatzconjectureExample.pas
|
2041
|
+
- tracks/delphi/exercises/collatz-conjecture/uCollatzconjectureTest.pas
|
2039
2042
|
- tracks/delphi/exercises/etl/ETL.dpr
|
2040
2043
|
- tracks/delphi/exercises/etl/uETLexample.pas
|
2041
2044
|
- tracks/delphi/exercises/etl/uETLtests.pas
|