trackler 2.0.6.25 → 2.0.6.26
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/common/exercises/nucleotide-count/canonical-data.json +44 -0
- data/common/exercises/scrabble-score/canonical-data.json +5 -0
- data/lib/trackler/version.rb +1 -1
- data/tracks/c/exercises/gigasecond/test/test_gigasecond.c +1 -1
- data/tracks/c/exercises/grains/src/example.c +4 -0
- data/tracks/c/exercises/grains/test/test_grains.c +12 -0
- data/tracks/csharp/exercises/error-handling/ErrorHandlingTest.cs +5 -5
- data/tracks/delphi/SETUP.md +1 -1
- data/tracks/fsharp/exercises/food-chain/HINTS.md +2 -0
- data/tracks/fsharp/exercises/house/HINTS.md +2 -0
- data/tracks/fsharp/exercises/proverb/HINTS.md +2 -0
- data/tracks/fsharp/exercises/scrabble-score/ScrabbleScoreTest.fs +6 -1
- data/tracks/fsharp/exercises/twelve-days/HINTS.md +2 -0
- data/tracks/haskell/config.json +60 -0
- data/tracks/java/config.json +6 -0
- data/tracks/java/exercises/clock/build.gradle +17 -0
- data/tracks/java/exercises/clock/src/example/java/Clock.java +49 -0
- data/tracks/java/exercises/clock/src/main/java/.keep +0 -0
- data/tracks/java/exercises/clock/src/test/java/ClockAddTest.java +135 -0
- data/tracks/java/exercises/clock/src/test/java/ClockCreationTest.java +120 -0
- data/tracks/java/exercises/clock/src/test/java/ClockEqualTest.java +98 -0
- data/tracks/java/exercises/grade-school/build.gradle +1 -0
- data/tracks/java/exercises/grade-school/src/test/java/SchoolTest.java +39 -28
- data/tracks/java/exercises/settings.gradle +1 -0
- data/tracks/javascript/exercises/rna-transcription/example.js +1 -0
- data/tracks/javascript/exercises/rna-transcription/rna-transcription.spec.js +12 -0
- data/tracks/rust/config.json +41 -41
- metadata +13 -2
data/tracks/java/config.json
CHANGED
@@ -58,6 +58,7 @@
|
|
58
58
|
"sublist",
|
59
59
|
"rectangles",
|
60
60
|
"matrix",
|
61
|
+
"clock",
|
61
62
|
"diamond",
|
62
63
|
"secret-handshake",
|
63
64
|
"flatten-array"
|
@@ -333,6 +334,11 @@
|
|
333
334
|
"difficulty": 1,
|
334
335
|
"topics": []
|
335
336
|
},
|
337
|
+
{
|
338
|
+
"slug": "clock",
|
339
|
+
"difficulty": 1,
|
340
|
+
"topics": []
|
341
|
+
},
|
336
342
|
{
|
337
343
|
"slug": "diamond",
|
338
344
|
"difficulty": 1,
|
@@ -0,0 +1,17 @@
|
|
1
|
+
apply plugin: "java"
|
2
|
+
apply plugin: "eclipse"
|
3
|
+
apply plugin: "idea"
|
4
|
+
|
5
|
+
repositories {
|
6
|
+
mavenCentral()
|
7
|
+
}
|
8
|
+
|
9
|
+
dependencies {
|
10
|
+
testCompile "junit:junit:4.12"
|
11
|
+
}
|
12
|
+
test {
|
13
|
+
testLogging {
|
14
|
+
exceptionFormat = 'full'
|
15
|
+
events = ["passed", "failed", "skipped"]
|
16
|
+
}
|
17
|
+
}
|
@@ -0,0 +1,49 @@
|
|
1
|
+
public class Clock {
|
2
|
+
private static final int MINUTES_IN_AN_HOUR = 60;
|
3
|
+
private static final int HOURS_IN_A_DAY = 24;
|
4
|
+
|
5
|
+
private int hours;
|
6
|
+
private int minutes;
|
7
|
+
|
8
|
+
public Clock(int hours, int minutes) {
|
9
|
+
this.hours = hours;
|
10
|
+
this.minutes = minutes;
|
11
|
+
sanitiseTime();
|
12
|
+
}
|
13
|
+
|
14
|
+
public void add(int minutes) {
|
15
|
+
this.minutes += minutes;
|
16
|
+
sanitiseTime();
|
17
|
+
}
|
18
|
+
|
19
|
+
private void sanitiseTime() {
|
20
|
+
while (minutes < 0) {
|
21
|
+
minutes += MINUTES_IN_AN_HOUR;
|
22
|
+
hours--;
|
23
|
+
}
|
24
|
+
while (hours < 0) {
|
25
|
+
hours += HOURS_IN_A_DAY;
|
26
|
+
}
|
27
|
+
int minutesOverflow = minutes / MINUTES_IN_AN_HOUR;
|
28
|
+
minutes = minutes % MINUTES_IN_AN_HOUR;
|
29
|
+
hours = (hours + minutesOverflow) % HOURS_IN_A_DAY;
|
30
|
+
}
|
31
|
+
|
32
|
+
@Override
|
33
|
+
public String toString() {
|
34
|
+
return toTimeString(hours) + ":" + toTimeString(minutes);
|
35
|
+
}
|
36
|
+
|
37
|
+
private String toTimeString(int number) {
|
38
|
+
if (number < 10) return "0" + number;
|
39
|
+
return String.valueOf(number);
|
40
|
+
}
|
41
|
+
|
42
|
+
@Override
|
43
|
+
public boolean equals(Object obj) {
|
44
|
+
if (!(obj instanceof Clock)) return false;
|
45
|
+
|
46
|
+
Clock clock = (Clock) obj;
|
47
|
+
return hours == clock.hours && minutes == clock.minutes;
|
48
|
+
}
|
49
|
+
}
|
File without changes
|
@@ -0,0 +1,135 @@
|
|
1
|
+
import org.junit.Ignore;
|
2
|
+
import org.junit.Test;
|
3
|
+
|
4
|
+
import static org.junit.Assert.assertEquals;
|
5
|
+
|
6
|
+
public class ClockAddTest {
|
7
|
+
|
8
|
+
@Ignore
|
9
|
+
@Test
|
10
|
+
public void addMinutes() {
|
11
|
+
Clock clock = new Clock(10, 0);
|
12
|
+
clock.add(3);
|
13
|
+
assertEquals("10:03", clock.toString());
|
14
|
+
}
|
15
|
+
|
16
|
+
@Ignore
|
17
|
+
@Test
|
18
|
+
public void addNoMinutes() {
|
19
|
+
Clock clock = new Clock(6, 41);
|
20
|
+
clock.add(0);
|
21
|
+
assertEquals("06:41", clock.toString());
|
22
|
+
}
|
23
|
+
|
24
|
+
@Ignore
|
25
|
+
@Test
|
26
|
+
public void addToNextHour() {
|
27
|
+
Clock clock = new Clock(0, 45);
|
28
|
+
clock.add(40);
|
29
|
+
assertEquals("01:25", clock.toString());
|
30
|
+
}
|
31
|
+
|
32
|
+
@Ignore
|
33
|
+
@Test
|
34
|
+
public void addMoreThanOneHour() {
|
35
|
+
Clock clock = new Clock(10, 0);
|
36
|
+
clock.add(61);
|
37
|
+
assertEquals("11:01", clock.toString());
|
38
|
+
}
|
39
|
+
|
40
|
+
@Ignore
|
41
|
+
@Test
|
42
|
+
public void addMoreThanTwoHoursWithCarry() {
|
43
|
+
Clock clock = new Clock(0, 45);
|
44
|
+
clock.add(160);
|
45
|
+
assertEquals("03:25", clock.toString());
|
46
|
+
}
|
47
|
+
|
48
|
+
@Ignore
|
49
|
+
@Test
|
50
|
+
public void addAcrossMidnight() {
|
51
|
+
Clock clock = new Clock(23, 59);
|
52
|
+
clock.add(2);
|
53
|
+
assertEquals("00:01", clock.toString());
|
54
|
+
}
|
55
|
+
|
56
|
+
@Ignore
|
57
|
+
@Test
|
58
|
+
public void addMoreThanOneDay() {
|
59
|
+
Clock clock = new Clock(5, 32);
|
60
|
+
clock.add(1500);
|
61
|
+
assertEquals("06:32", clock.toString());
|
62
|
+
}
|
63
|
+
|
64
|
+
@Ignore
|
65
|
+
@Test
|
66
|
+
public void addMoreThanTwoDays() {
|
67
|
+
Clock clock = new Clock(1, 1);
|
68
|
+
clock.add(3500);
|
69
|
+
assertEquals("11:21", clock.toString());
|
70
|
+
}
|
71
|
+
|
72
|
+
@Ignore
|
73
|
+
@Test
|
74
|
+
public void subtractMinutes() {
|
75
|
+
Clock clock = new Clock(10, 3);
|
76
|
+
clock.add(-3);
|
77
|
+
assertEquals("10:00", clock.toString());
|
78
|
+
}
|
79
|
+
|
80
|
+
@Ignore
|
81
|
+
@Test
|
82
|
+
public void subtractToPreviousHour() {
|
83
|
+
Clock clock = new Clock(10, 3);
|
84
|
+
clock.add(-30);
|
85
|
+
assertEquals("09:33", clock.toString());
|
86
|
+
}
|
87
|
+
|
88
|
+
@Ignore
|
89
|
+
@Test
|
90
|
+
public void subtractMoreThanAnHour() {
|
91
|
+
Clock clock = new Clock(10, 3);
|
92
|
+
clock.add(-70);
|
93
|
+
assertEquals("08:53", clock.toString());
|
94
|
+
}
|
95
|
+
|
96
|
+
@Ignore
|
97
|
+
@Test
|
98
|
+
public void subtractAcrossMidnight() {
|
99
|
+
Clock clock = new Clock(0, 3);
|
100
|
+
clock.add(-4);
|
101
|
+
assertEquals("23:59", clock.toString());
|
102
|
+
}
|
103
|
+
|
104
|
+
@Ignore
|
105
|
+
@Test
|
106
|
+
public void subtractMoreThanTwoHours() {
|
107
|
+
Clock clock = new Clock(0, 0);
|
108
|
+
clock.add(-160);
|
109
|
+
assertEquals("21:20", clock.toString());
|
110
|
+
}
|
111
|
+
|
112
|
+
@Ignore
|
113
|
+
@Test
|
114
|
+
public void subtractMoreThanTwoHoursWithBorrow() {
|
115
|
+
Clock clock = new Clock(6, 15);
|
116
|
+
clock.add(-160);
|
117
|
+
assertEquals("03:35", clock.toString());
|
118
|
+
}
|
119
|
+
|
120
|
+
@Ignore
|
121
|
+
@Test
|
122
|
+
public void subtractMoreThanOneDay() {
|
123
|
+
Clock clock = new Clock(5, 32);
|
124
|
+
clock.add(-1500);
|
125
|
+
assertEquals("04:32", clock.toString());
|
126
|
+
}
|
127
|
+
|
128
|
+
@Ignore
|
129
|
+
@Test
|
130
|
+
public void subtractMoreThanTwoDays() {
|
131
|
+
Clock clock = new Clock(2, 20);
|
132
|
+
clock.add(-3000);
|
133
|
+
assertEquals("00:20", clock.toString());
|
134
|
+
}
|
135
|
+
}
|
@@ -0,0 +1,120 @@
|
|
1
|
+
import org.junit.Ignore;
|
2
|
+
import org.junit.Test;
|
3
|
+
|
4
|
+
import static org.junit.Assert.assertEquals;
|
5
|
+
|
6
|
+
public class ClockCreationTest {
|
7
|
+
|
8
|
+
@Test
|
9
|
+
public void canPrintTimeOnTheHour() {
|
10
|
+
assertEquals("08:00", new Clock(8, 0).toString());
|
11
|
+
}
|
12
|
+
|
13
|
+
@Ignore
|
14
|
+
@Test
|
15
|
+
public void canPrintTimeWithMinutes() {
|
16
|
+
assertEquals("11:09", new Clock(11, 9).toString());
|
17
|
+
}
|
18
|
+
|
19
|
+
@Ignore
|
20
|
+
@Test
|
21
|
+
public void midnightPrintsAsZero() {
|
22
|
+
assertEquals("00:00", new Clock(24, 0).toString());
|
23
|
+
}
|
24
|
+
|
25
|
+
@Ignore
|
26
|
+
@Test
|
27
|
+
public void hourRollsOver() {
|
28
|
+
assertEquals("01:00", new Clock(25, 0).toString());
|
29
|
+
}
|
30
|
+
|
31
|
+
@Ignore
|
32
|
+
@Test
|
33
|
+
public void hourRollsOverContinuously() {
|
34
|
+
assertEquals("04:00", new Clock(100, 0).toString());
|
35
|
+
}
|
36
|
+
|
37
|
+
@Ignore
|
38
|
+
@Test
|
39
|
+
public void sixtyMinutesIsNextHour() {
|
40
|
+
assertEquals("02:00", new Clock(1, 60).toString());
|
41
|
+
}
|
42
|
+
|
43
|
+
@Ignore
|
44
|
+
@Test
|
45
|
+
public void minutesRollOver() {
|
46
|
+
assertEquals("02:40", new Clock(0, 160).toString());
|
47
|
+
}
|
48
|
+
|
49
|
+
@Ignore
|
50
|
+
@Test
|
51
|
+
public void minutesRollOverContinuously() {
|
52
|
+
assertEquals("04:43", new Clock(0, 1723).toString());
|
53
|
+
}
|
54
|
+
|
55
|
+
@Ignore
|
56
|
+
@Test
|
57
|
+
public void hourAndMinutesRollOver() {
|
58
|
+
assertEquals("03:40", new Clock(25, 160).toString());
|
59
|
+
}
|
60
|
+
|
61
|
+
@Ignore
|
62
|
+
@Test
|
63
|
+
public void hourAndMinutesRollOverContinuously() {
|
64
|
+
assertEquals("11:01", new Clock(201, 3001).toString());
|
65
|
+
}
|
66
|
+
|
67
|
+
@Ignore
|
68
|
+
@Test
|
69
|
+
public void hourAndMinutesRollOverToExactlyMidnight() {
|
70
|
+
assertEquals("00:00", new Clock(72, 8640).toString());
|
71
|
+
}
|
72
|
+
|
73
|
+
@Ignore
|
74
|
+
@Test
|
75
|
+
public void negativeHour() {
|
76
|
+
assertEquals("23:15", new Clock(-1, 15).toString());
|
77
|
+
}
|
78
|
+
|
79
|
+
@Ignore
|
80
|
+
@Test
|
81
|
+
public void negativeHourRollsOver() {
|
82
|
+
assertEquals("23:00", new Clock(-25, 0).toString());
|
83
|
+
}
|
84
|
+
|
85
|
+
@Ignore
|
86
|
+
@Test
|
87
|
+
public void negativeHourRollsOverContinuously() {
|
88
|
+
assertEquals("05:00", new Clock(-91, 0).toString());
|
89
|
+
}
|
90
|
+
|
91
|
+
@Ignore
|
92
|
+
@Test
|
93
|
+
public void negativeMinutes() {
|
94
|
+
assertEquals("00:20", new Clock(1, -40).toString());
|
95
|
+
}
|
96
|
+
|
97
|
+
@Ignore
|
98
|
+
@Test
|
99
|
+
public void negativeMinutesRollOver() {
|
100
|
+
assertEquals("22:20", new Clock(1, -160).toString());
|
101
|
+
}
|
102
|
+
|
103
|
+
@Ignore
|
104
|
+
@Test
|
105
|
+
public void negativeMinutesRollOverContinuously() {
|
106
|
+
assertEquals("16:40", new Clock(1, -4820).toString());
|
107
|
+
}
|
108
|
+
|
109
|
+
@Ignore
|
110
|
+
@Test
|
111
|
+
public void negativeHourAndMinutesBothRollOver() {
|
112
|
+
assertEquals("20:20", new Clock(-25, -160).toString());
|
113
|
+
}
|
114
|
+
|
115
|
+
@Ignore
|
116
|
+
@Test
|
117
|
+
public void negativeHourAndMinutesBothRollOverContinuously() {
|
118
|
+
assertEquals("22:10", new Clock(-121, -5810).toString());
|
119
|
+
}
|
120
|
+
}
|
@@ -0,0 +1,98 @@
|
|
1
|
+
import org.junit.Ignore;
|
2
|
+
import org.junit.Test;
|
3
|
+
|
4
|
+
import static org.junit.Assert.assertFalse;
|
5
|
+
import static org.junit.Assert.assertTrue;
|
6
|
+
|
7
|
+
public class ClockEqualTest {
|
8
|
+
|
9
|
+
@Ignore
|
10
|
+
@Test
|
11
|
+
public void clocksWithSameTimeAreEqual() {
|
12
|
+
assertTrue(new Clock(15, 37).equals(new Clock(15, 37)));
|
13
|
+
}
|
14
|
+
|
15
|
+
@Ignore
|
16
|
+
@Test
|
17
|
+
public void clocksAMinuteApartAreNotEqual() {
|
18
|
+
assertFalse(new Clock(15, 36).equals(new Clock(15, 37)));
|
19
|
+
}
|
20
|
+
|
21
|
+
@Ignore
|
22
|
+
@Test
|
23
|
+
public void clocksAnHourApartAreNotEqual() {
|
24
|
+
assertFalse(new Clock(14, 37).equals(new Clock(15, 37)));
|
25
|
+
}
|
26
|
+
|
27
|
+
@Ignore
|
28
|
+
@Test
|
29
|
+
public void clocksWithHourOverflow() {
|
30
|
+
assertTrue(new Clock(10, 37).equals(new Clock(34, 37)));
|
31
|
+
}
|
32
|
+
|
33
|
+
@Ignore
|
34
|
+
@Test
|
35
|
+
public void clocksWithHourOverflowBySeveralDays() {
|
36
|
+
assertTrue(new Clock(3, 11).equals(new Clock(99, 11)));
|
37
|
+
}
|
38
|
+
|
39
|
+
@Ignore
|
40
|
+
@Test
|
41
|
+
public void clocksWithNegateHour() {
|
42
|
+
assertTrue(new Clock(22, 40).equals(new Clock(-2, 40)));
|
43
|
+
}
|
44
|
+
|
45
|
+
@Ignore
|
46
|
+
@Test
|
47
|
+
public void clocksWithNegativeHourThatWraps() {
|
48
|
+
assertTrue(new Clock(17, 3).equals(new Clock(-31, 3)));
|
49
|
+
}
|
50
|
+
|
51
|
+
@Ignore
|
52
|
+
@Test
|
53
|
+
public void clocksWithNegativeHourThatWrapsMultipleTimes() {
|
54
|
+
assertTrue(new Clock(13, 49).equals(new Clock(-83, 49)));
|
55
|
+
}
|
56
|
+
|
57
|
+
@Ignore
|
58
|
+
@Test
|
59
|
+
public void clocksWithMinuteOverflow() {
|
60
|
+
assertTrue(new Clock(0, 1).equals(new Clock(0, 1441)));
|
61
|
+
}
|
62
|
+
|
63
|
+
@Ignore
|
64
|
+
@Test
|
65
|
+
public void clocksWithMinuteOverflowBySeveralDays() {
|
66
|
+
assertTrue(new Clock(2, 2).equals(new Clock(2, 4322)));
|
67
|
+
}
|
68
|
+
|
69
|
+
@Ignore
|
70
|
+
@Test
|
71
|
+
public void clocksWithNegativeMinutes() {
|
72
|
+
assertTrue(new Clock(2, 40).equals(new Clock(3, -20)));
|
73
|
+
}
|
74
|
+
|
75
|
+
@Ignore
|
76
|
+
@Test
|
77
|
+
public void clocksWithNegativeMinutesThatWraps() {
|
78
|
+
assertTrue(new Clock(4, 10).equals(new Clock(5, -1490)));
|
79
|
+
}
|
80
|
+
|
81
|
+
@Ignore
|
82
|
+
@Test
|
83
|
+
public void clocksWithNegativeMinutesThatWrapsMultipleTimes() {
|
84
|
+
assertTrue(new Clock(6, 15).equals(new Clock(6, -4305)));
|
85
|
+
}
|
86
|
+
|
87
|
+
@Ignore
|
88
|
+
@Test
|
89
|
+
public void clocksWithNegativeHoursAndMinutes() {
|
90
|
+
assertTrue(new Clock(7, 32).equals(new Clock(-12, -268)));
|
91
|
+
}
|
92
|
+
|
93
|
+
@Ignore
|
94
|
+
@Test
|
95
|
+
public void clocksWithNegativeHoursAndMinutesThatWrap() {
|
96
|
+
assertTrue(new Clock(18, 7).equals(new Clock(-54, -11513)));
|
97
|
+
}
|
98
|
+
}
|