trackler 2.2.1.84 → 2.2.1.85
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/problem-specifications/exercises/atbash-cipher/canonical-data.json +38 -14
- data/problem-specifications/exercises/bracket-push/canonical-data.json +44 -16
- data/problem-specifications/exercises/change/canonical-data.json +46 -24
- data/problem-specifications/exercises/collatz-conjecture/canonical-data.json +20 -8
- data/problem-specifications/exercises/connect/canonical-data.json +87 -67
- data/problem-specifications/exercises/crypto-square/canonical-data.json +23 -9
- data/problem-specifications/exercises/diamond/canonical-data.json +16 -6
- data/problem-specifications/exercises/difference-of-squares/canonical-data.json +29 -11
- data/problem-specifications/exercises/dominoes/canonical-data.json +37 -13
- data/problem-specifications/exercises/flatten-array/canonical-data.json +19 -7
- data/problem-specifications/exercises/meetup/canonical-data.json +667 -477
- data/tracks/haskell/config.json +9 -0
- data/tracks/haskell/docs/LEARNING.md +3 -3
- data/tracks/haskell/exercises/food-chain/examples/success-standard/src/FoodChain.hs +1 -1
- data/tracks/haskell/exercises/forth/examples/success-standard/src/Forth.hs +2 -2
- data/tracks/haskell/exercises/parallel-letter-frequency/examples/success-standard/src/Frequency.hs +1 -1
- data/tracks/haskell/exercises/sgf-parsing/examples/success-standard/src/Sgf.hs +1 -1
- data/tracks/haskell/exercises/twelve-days/README.md +89 -0
- data/tracks/haskell/exercises/twelve-days/examples/success-standard/package.yaml +16 -0
- data/tracks/haskell/exercises/twelve-days/examples/success-standard/src/TwelveDays.hs +36 -0
- data/tracks/haskell/exercises/twelve-days/package.yaml +20 -0
- data/tracks/haskell/exercises/twelve-days/src/TwelveDays.hs +4 -0
- data/tracks/haskell/exercises/twelve-days/stack.yaml +1 -0
- data/tracks/haskell/exercises/twelve-days/test/Tests.hs +146 -0
- data/tracks/haskell/exercises/zipper/examples/success-standard/src/Zipper.hs +3 -3
- data/tracks/java/exercises/allergies/.meta/version +2 -0
- data/tracks/java/exercises/allergies/src/test/java/AllergiesTest.java +10 -65
- data/tracks/java/exercises/anagram/.meta/version +1 -0
- data/tracks/java/exercises/anagram/src/test/java/AnagramTest.java +36 -35
- data/tracks/java/exercises/atbash-cipher/.meta/version +1 -0
- data/tracks/java/exercises/atbash-cipher/src/test/java/AtbashTest.java +3 -2
- data/tracks/java/exercises/bob/.meta/src/reference/java/Bob.java +3 -0
- data/tracks/java/exercises/bob/.meta/version +1 -0
- data/tracks/java/exercises/bob/src/test/java/BobTest.java +79 -15
- data/tracks/java/exercises/crypto-square/.meta/src/reference/java/CryptoSquare.java +62 -0
- data/tracks/java/exercises/crypto-square/.meta/version +1 -0
- data/tracks/java/exercises/crypto-square/src/test/java/CryptoSquareTest.java +28 -101
- data/tracks/java/exercises/custom-set/.meta/version +1 -1
- data/tracks/java/exercises/custom-set/src/test/java/CustomSetTest.java +8 -0
- data/tracks/java/exercises/forth/.meta/version +1 -1
- data/tracks/java/exercises/forth/src/test/java/ForthEvaluatorTest.java +52 -12
- data/tracks/java/exercises/pascals-triangle/.meta/version +1 -1
- data/tracks/java/exercises/pascals-triangle/src/test/java/PascalsTriangleGeneratorTest.java +48 -0
- data/tracks/java/exercises/prime-factors/.meta/version +1 -0
- data/tracks/java/exercises/prime-factors/src/test/java/PrimeFactorsCalculatorTest.java +2 -6
- data/tracks/java/exercises/protein-translation/.meta/version +1 -1
- data/tracks/java/exercises/roman-numerals/.meta/version +1 -0
- data/tracks/java/exercises/roman-numerals/src/test/java/RomanNumeralsTest.java +0 -1
- data/tracks/java/exercises/rotational-cipher/.meta/version +1 -0
- data/tracks/java/exercises/rotational-cipher/src/test/java/RotationalCipherTest.java +7 -7
- data/tracks/javascript/.eslintignore +0 -1
- data/tracks/javascript/README.md +1 -1
- data/tracks/javascript/exercises/clock/example.js +8 -11
- metadata +18 -3
- data/tracks/java/exercises/crypto-square/.meta/src/reference/java/Crypto.java +0 -74
|
@@ -1 +1 @@
|
|
|
1
|
-
1.0
|
|
1
|
+
1.1.0
|
|
@@ -170,6 +170,14 @@ public class CustomSetTest {
|
|
|
170
170
|
assertFalse(customSet.equals(secondCustomSet));
|
|
171
171
|
}
|
|
172
172
|
|
|
173
|
+
@Ignore("Remove to run test")
|
|
174
|
+
@Test
|
|
175
|
+
public void setIsNotEqualToLargerSetWithSameElements() {
|
|
176
|
+
CustomSet<String> customSet = new CustomSet<>(Arrays.asList("1", "2", "3"));
|
|
177
|
+
CustomSet<String> secondCustomSet = new CustomSet<>(Arrays.asList("1", "2", "3", "4"));
|
|
178
|
+
assertFalse(customSet.equals(secondCustomSet));
|
|
179
|
+
}
|
|
180
|
+
|
|
173
181
|
@Ignore("Remove to run test")
|
|
174
182
|
@Test
|
|
175
183
|
public void addToEmptySet() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
1.
|
|
1
|
+
1.4.0
|
|
@@ -21,14 +21,6 @@ public class ForthEvaluatorTest {
|
|
|
21
21
|
forthEvaluator = new ForthEvaluator();
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
@Test
|
|
25
|
-
public void testEmptyProgramResultsInEmptyStack() {
|
|
26
|
-
assertEquals(
|
|
27
|
-
Collections.emptyList(),
|
|
28
|
-
forthEvaluator.evaluateProgram(Collections.emptyList()));
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
@Ignore("Remove to run test")
|
|
32
24
|
@Test
|
|
33
25
|
public void testNumbersAreJustPushedOntoTheStack() {
|
|
34
26
|
assertEquals(
|
|
@@ -175,18 +167,18 @@ public class ForthEvaluatorTest {
|
|
|
175
167
|
|
|
176
168
|
@Ignore("Remove to run test")
|
|
177
169
|
@Test
|
|
178
|
-
public void
|
|
170
|
+
public void testDupCopiesAValueOnTheStack() {
|
|
179
171
|
assertEquals(
|
|
180
172
|
Arrays.asList(1, 1),
|
|
181
|
-
forthEvaluator.evaluateProgram(Collections.singletonList("1
|
|
173
|
+
forthEvaluator.evaluateProgram(Collections.singletonList("1 dup")));
|
|
182
174
|
}
|
|
183
175
|
|
|
184
176
|
@Ignore("Remove to run test")
|
|
185
177
|
@Test
|
|
186
|
-
public void
|
|
178
|
+
public void testDupCopiesTopValueOnTheStack() {
|
|
187
179
|
assertEquals(
|
|
188
180
|
Arrays.asList(1, 2, 2),
|
|
189
|
-
forthEvaluator.evaluateProgram(Collections.singletonList("1 2
|
|
181
|
+
forthEvaluator.evaluateProgram(Collections.singletonList("1 2 dup")));
|
|
190
182
|
}
|
|
191
183
|
|
|
192
184
|
@Ignore("Remove to run test")
|
|
@@ -349,4 +341,52 @@ public class ForthEvaluatorTest {
|
|
|
349
341
|
forthEvaluator.evaluateProgram(Collections.singletonList("foo"));
|
|
350
342
|
}
|
|
351
343
|
|
|
344
|
+
@Ignore("Remove to run test")
|
|
345
|
+
@Test
|
|
346
|
+
public void testDupIsCaseInsensitive() {
|
|
347
|
+
assertEquals(
|
|
348
|
+
Arrays.asList(1, 1, 1, 1),
|
|
349
|
+
forthEvaluator.evaluateProgram(Collections.singletonList("1 DUP Dup dup")));
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
@Ignore("Remove to run test")
|
|
353
|
+
@Test
|
|
354
|
+
public void testDropIsCaseInsensitive() {
|
|
355
|
+
assertEquals(
|
|
356
|
+
Arrays.asList(1),
|
|
357
|
+
forthEvaluator.evaluateProgram(Collections.singletonList("1 2 3 4 DROP Drop drop")));
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
@Ignore("Remove to run test")
|
|
361
|
+
@Test
|
|
362
|
+
public void testSwapIsCaseInsensitive() {
|
|
363
|
+
assertEquals(
|
|
364
|
+
Arrays.asList(2, 3, 4, 1),
|
|
365
|
+
forthEvaluator.evaluateProgram(Collections.singletonList("1 2 SWAP 3 Swap 4 swap")));
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
@Ignore("Remove to run test")
|
|
369
|
+
@Test
|
|
370
|
+
public void testOverIsCaseInsensitive() {
|
|
371
|
+
assertEquals(
|
|
372
|
+
Arrays.asList(1, 2, 1, 2, 1),
|
|
373
|
+
forthEvaluator.evaluateProgram(Collections.singletonList("1 2 OVER Over over")));
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
@Ignore("Remove to run test")
|
|
377
|
+
@Test
|
|
378
|
+
public void testUserDefinedWordsAreCaseInsensitive() {
|
|
379
|
+
assertEquals(
|
|
380
|
+
Arrays.asList(1, 1, 1, 1),
|
|
381
|
+
forthEvaluator.evaluateProgram(Arrays.asList(": foo dup ;", "1 FOO Foo foo")));
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
@Ignore("Remove to run test")
|
|
385
|
+
@Test
|
|
386
|
+
public void testDefinitionsAreCaseInsensitive() {
|
|
387
|
+
assertEquals(
|
|
388
|
+
Arrays.asList(1, 1, 1, 1),
|
|
389
|
+
forthEvaluator.evaluateProgram(Arrays.asList(": SWAP DUP Dup dup ;", "1 swap")));
|
|
390
|
+
}
|
|
391
|
+
|
|
352
392
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
1.
|
|
1
|
+
1.2.0
|
|
@@ -73,6 +73,54 @@ public class PascalsTriangleGeneratorTest {
|
|
|
73
73
|
assertArrayEquals(expectedOutput, pascalsTriangleGenerator.generateTriangle(4));
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
+
@Ignore("Remove to run test")
|
|
77
|
+
@Test
|
|
78
|
+
public void testTriangleWithFiveRows() {
|
|
79
|
+
int[][] expectedOutput = new int[][]{
|
|
80
|
+
{1},
|
|
81
|
+
{1, 1},
|
|
82
|
+
{1, 2, 1},
|
|
83
|
+
{1, 3, 3, 1},
|
|
84
|
+
{1, 4, 6, 4, 1}
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
assertArrayEquals(expectedOutput, pascalsTriangleGenerator.generateTriangle(5));
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
@Ignore("Remove to run test")
|
|
91
|
+
@Test
|
|
92
|
+
public void testTriangleWithSixRows() {
|
|
93
|
+
int[][] expectedOutput = new int[][]{
|
|
94
|
+
{1},
|
|
95
|
+
{1, 1},
|
|
96
|
+
{1, 2, 1},
|
|
97
|
+
{1, 3, 3, 1},
|
|
98
|
+
{1, 4, 6, 4, 1},
|
|
99
|
+
{1, 5, 10, 10, 5, 1}
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
assertArrayEquals(expectedOutput, pascalsTriangleGenerator.generateTriangle(6));
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
@Ignore("Remove to run test")
|
|
106
|
+
@Test
|
|
107
|
+
public void testTriangleWithTenRows() {
|
|
108
|
+
int[][] expectedOutput = new int[][]{
|
|
109
|
+
{1},
|
|
110
|
+
{1, 1},
|
|
111
|
+
{1, 2, 1},
|
|
112
|
+
{1, 3, 3, 1},
|
|
113
|
+
{1, 4, 6, 4, 1},
|
|
114
|
+
{1, 5, 10, 10, 5, 1},
|
|
115
|
+
{1, 6, 15, 20, 15, 6, 1},
|
|
116
|
+
{1, 7, 21, 35, 35, 21, 7, 1},
|
|
117
|
+
{1, 8, 28, 56, 70, 56, 28, 8, 1},
|
|
118
|
+
{1, 9, 36, 84, 126, 126, 84, 36, 9, 1}
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
assertArrayEquals(expectedOutput, pascalsTriangleGenerator.generateTriangle(10));
|
|
122
|
+
}
|
|
123
|
+
|
|
76
124
|
@Ignore("Remove to run test")
|
|
77
125
|
@Test
|
|
78
126
|
public void testValidatesNotNegativeRows() {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1.0.0
|
|
@@ -21,13 +21,9 @@ public class PrimeFactorsCalculatorTest {
|
|
|
21
21
|
return Arrays.asList(new Object[][]{
|
|
22
22
|
{1L, Collections.emptyList()},
|
|
23
23
|
{2L, Collections.singletonList(2L)},
|
|
24
|
-
{3L, Collections.singletonList(3L)},
|
|
25
|
-
{4L, Arrays.asList(2L, 2L)},
|
|
26
|
-
{6L, Arrays.asList(2L, 3L)},
|
|
27
|
-
{8L, Arrays.asList(2L, 2L, 2L)},
|
|
28
24
|
{9L, Arrays.asList(3L, 3L)},
|
|
29
|
-
{
|
|
30
|
-
{
|
|
25
|
+
{8L, Arrays.asList(2L, 2L, 2L)},
|
|
26
|
+
{12L, Arrays.asList(2L, 2L, 3L)},
|
|
31
27
|
{901255L, Arrays.asList(5L, 17L, 23L, 461L)},
|
|
32
28
|
{93819012551L, Arrays.asList(11L, 9539L, 894119L)}
|
|
33
29
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
1.0.
|
|
1
|
+
1.0.1
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1.0.0
|
|
@@ -18,7 +18,6 @@ public class RomanNumeralsTest {
|
|
|
18
18
|
@Parameters(name = "{index}: expected arabic numeral {0} to be converted to roman numeral \"{1}\".")
|
|
19
19
|
public static Collection<Object[]> data() {
|
|
20
20
|
return Arrays.asList(new Object[][]{
|
|
21
|
-
{0, ""},
|
|
22
21
|
{1, "I"},
|
|
23
22
|
{2, "II"},
|
|
24
23
|
{3, "III"},
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1.1.0
|
|
@@ -6,6 +6,13 @@ public class RotationalCipherTest {
|
|
|
6
6
|
|
|
7
7
|
private RotationalCipher rotationalCipher;
|
|
8
8
|
|
|
9
|
+
@Test
|
|
10
|
+
public void rotateSingleCharacterBy0() {
|
|
11
|
+
rotationalCipher = new RotationalCipher(0);
|
|
12
|
+
Assert.assertEquals("a", rotationalCipher.rotate("a"));
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
@Ignore("Remove to run test")
|
|
9
16
|
@Test
|
|
10
17
|
public void rotateSingleCharacterBy1() {
|
|
11
18
|
rotationalCipher = new RotationalCipher(1);
|
|
@@ -19,13 +26,6 @@ public class RotationalCipherTest {
|
|
|
19
26
|
Assert.assertEquals("a", rotationalCipher.rotate("a"));
|
|
20
27
|
}
|
|
21
28
|
|
|
22
|
-
@Ignore("Remove to run test")
|
|
23
|
-
@Test
|
|
24
|
-
public void rotateSingleCharacterBy0() {
|
|
25
|
-
rotationalCipher = new RotationalCipher(0);
|
|
26
|
-
Assert.assertEquals("a", rotationalCipher.rotate("a"));
|
|
27
|
-
}
|
|
28
|
-
|
|
29
29
|
@Ignore("Remove to run test")
|
|
30
30
|
@Test
|
|
31
31
|
public void rotateSingleCharacterBy13() {
|
data/tracks/javascript/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# JavaScript [](https://travis-ci.org/exercism/javascript)
|
|
1
|
+
# JavaScript [](https://travis-ci.org/exercism/javascript)[](https://gitter.im/exercism/xecmascript?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
|
2
2
|
|
|
3
3
|
Exercism exercises in JavaScript
|
|
4
4
|
|
|
@@ -8,15 +8,12 @@ var MILLIS_IN_AN_HOUR = MINUTES_IN_AN_HOUR * MILLIS_IN_A_MINUTE;
|
|
|
8
8
|
var MILLIS_IN_A_DAY = HOURS_IN_A_DAY * MILLIS_IN_AN_HOUR;
|
|
9
9
|
|
|
10
10
|
function makePositive(time, maxValue) {
|
|
11
|
-
time
|
|
12
|
-
time += maxValue;
|
|
13
|
-
return time;
|
|
11
|
+
return time % maxValue + maxValue;
|
|
14
12
|
}
|
|
15
13
|
|
|
16
|
-
function at(
|
|
17
|
-
minutes =
|
|
18
|
-
hours = makePositive(
|
|
19
|
-
minutes = makePositive(minutes, MINUTES_IN_A_DAY);
|
|
14
|
+
function at(inputHours, inputMinutes) {
|
|
15
|
+
var minutes = makePositive(inputMinutes || 0, MINUTES_IN_A_DAY);
|
|
16
|
+
var hours = makePositive(inputHours, HOURS_IN_A_DAY);
|
|
20
17
|
|
|
21
18
|
var clock = {};
|
|
22
19
|
var value = (hours * MILLIS_IN_AN_HOUR) + (minutes * MILLIS_IN_A_MINUTE);
|
|
@@ -31,13 +28,13 @@ function at(hours, minutes) {
|
|
|
31
28
|
return time[0] + ':' + time[1];
|
|
32
29
|
};
|
|
33
30
|
|
|
34
|
-
clock.plus = function (
|
|
35
|
-
value +=
|
|
31
|
+
clock.plus = function (addMinutes) {
|
|
32
|
+
value += addMinutes * MILLIS_IN_A_MINUTE;
|
|
36
33
|
return clock;
|
|
37
34
|
};
|
|
38
35
|
|
|
39
|
-
clock.minus = function (
|
|
40
|
-
value -=
|
|
36
|
+
clock.minus = function (subMinutes) {
|
|
37
|
+
value -= subMinutes * MILLIS_IN_A_MINUTE;
|
|
41
38
|
return clock;
|
|
42
39
|
};
|
|
43
40
|
|
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.2.1.
|
|
4
|
+
version: 2.2.1.85
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Katrina Owen
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2018-01-
|
|
11
|
+
date: 2018-01-04 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rubyzip
|
|
@@ -7066,6 +7066,13 @@ files:
|
|
|
7066
7066
|
- tracks/haskell/exercises/trinary/src/Trinary.hs
|
|
7067
7067
|
- tracks/haskell/exercises/trinary/stack.yaml
|
|
7068
7068
|
- tracks/haskell/exercises/trinary/test/Tests.hs
|
|
7069
|
+
- tracks/haskell/exercises/twelve-days/README.md
|
|
7070
|
+
- tracks/haskell/exercises/twelve-days/examples/success-standard/package.yaml
|
|
7071
|
+
- tracks/haskell/exercises/twelve-days/examples/success-standard/src/TwelveDays.hs
|
|
7072
|
+
- tracks/haskell/exercises/twelve-days/package.yaml
|
|
7073
|
+
- tracks/haskell/exercises/twelve-days/src/TwelveDays.hs
|
|
7074
|
+
- tracks/haskell/exercises/twelve-days/stack.yaml
|
|
7075
|
+
- tracks/haskell/exercises/twelve-days/test/Tests.hs
|
|
7069
7076
|
- tracks/haskell/exercises/word-count/HINTS.md
|
|
7070
7077
|
- tracks/haskell/exercises/word-count/README.md
|
|
7071
7078
|
- tracks/haskell/exercises/word-count/examples/success-newtype/package.yaml
|
|
@@ -7234,11 +7241,13 @@ files:
|
|
|
7234
7241
|
- tracks/java/exercises/all-your-base/src/test/java/BaseConverterTest.java
|
|
7235
7242
|
- tracks/java/exercises/allergies/.meta/src/reference/java/Allergen.java
|
|
7236
7243
|
- tracks/java/exercises/allergies/.meta/src/reference/java/Allergies.java
|
|
7244
|
+
- tracks/java/exercises/allergies/.meta/version
|
|
7237
7245
|
- tracks/java/exercises/allergies/README.md
|
|
7238
7246
|
- tracks/java/exercises/allergies/build.gradle
|
|
7239
7247
|
- tracks/java/exercises/allergies/src/main/java/Allergen.java
|
|
7240
7248
|
- tracks/java/exercises/allergies/src/test/java/AllergiesTest.java
|
|
7241
7249
|
- tracks/java/exercises/anagram/.meta/src/reference/java/Anagram.java
|
|
7250
|
+
- tracks/java/exercises/anagram/.meta/version
|
|
7242
7251
|
- tracks/java/exercises/anagram/README.md
|
|
7243
7252
|
- tracks/java/exercises/anagram/build.gradle
|
|
7244
7253
|
- tracks/java/exercises/anagram/src/main/java/.keep
|
|
@@ -7250,6 +7259,7 @@ files:
|
|
|
7250
7259
|
- tracks/java/exercises/armstrong-numbers/src/main/java/ArmstrongNumbers.java
|
|
7251
7260
|
- tracks/java/exercises/armstrong-numbers/src/test/java/ArmstrongNumbersTest.java
|
|
7252
7261
|
- tracks/java/exercises/atbash-cipher/.meta/src/reference/java/Atbash.java
|
|
7262
|
+
- tracks/java/exercises/atbash-cipher/.meta/version
|
|
7253
7263
|
- tracks/java/exercises/atbash-cipher/README.md
|
|
7254
7264
|
- tracks/java/exercises/atbash-cipher/build.gradle
|
|
7255
7265
|
- tracks/java/exercises/atbash-cipher/src/main/java/.keep
|
|
@@ -7283,6 +7293,7 @@ files:
|
|
|
7283
7293
|
- tracks/java/exercises/binary/src/main/java/.keep
|
|
7284
7294
|
- tracks/java/exercises/binary/src/test/java/BinaryTest.java
|
|
7285
7295
|
- tracks/java/exercises/bob/.meta/src/reference/java/Bob.java
|
|
7296
|
+
- tracks/java/exercises/bob/.meta/version
|
|
7286
7297
|
- tracks/java/exercises/bob/README.md
|
|
7287
7298
|
- tracks/java/exercises/bob/build.gradle
|
|
7288
7299
|
- tracks/java/exercises/bob/src/main/java/.keep
|
|
@@ -7337,7 +7348,8 @@ files:
|
|
|
7337
7348
|
- tracks/java/exercises/complex-numbers/build.gradle
|
|
7338
7349
|
- tracks/java/exercises/complex-numbers/src/main/java/.keep
|
|
7339
7350
|
- tracks/java/exercises/complex-numbers/src/test/java/ComplexNumberTest.java
|
|
7340
|
-
- tracks/java/exercises/crypto-square/.meta/src/reference/java/
|
|
7351
|
+
- tracks/java/exercises/crypto-square/.meta/src/reference/java/CryptoSquare.java
|
|
7352
|
+
- tracks/java/exercises/crypto-square/.meta/version
|
|
7341
7353
|
- tracks/java/exercises/crypto-square/README.md
|
|
7342
7354
|
- tracks/java/exercises/crypto-square/build.gradle
|
|
7343
7355
|
- tracks/java/exercises/crypto-square/src/main/java/.keep
|
|
@@ -7556,6 +7568,7 @@ files:
|
|
|
7556
7568
|
- tracks/java/exercises/poker/src/main/java/.keep
|
|
7557
7569
|
- tracks/java/exercises/poker/src/test/java/PokerTest.java
|
|
7558
7570
|
- tracks/java/exercises/prime-factors/.meta/src/reference/java/PrimeFactorsCalculator.java
|
|
7571
|
+
- tracks/java/exercises/prime-factors/.meta/version
|
|
7559
7572
|
- tracks/java/exercises/prime-factors/README.md
|
|
7560
7573
|
- tracks/java/exercises/prime-factors/build.gradle
|
|
7561
7574
|
- tracks/java/exercises/prime-factors/src/main/java/.keep
|
|
@@ -7626,11 +7639,13 @@ files:
|
|
|
7626
7639
|
- tracks/java/exercises/robot-simulator/src/main/java/Orientation.java
|
|
7627
7640
|
- tracks/java/exercises/robot-simulator/src/test/java/RobotTest.java
|
|
7628
7641
|
- tracks/java/exercises/roman-numerals/.meta/src/reference/java/RomanNumeral.java
|
|
7642
|
+
- tracks/java/exercises/roman-numerals/.meta/version
|
|
7629
7643
|
- tracks/java/exercises/roman-numerals/README.md
|
|
7630
7644
|
- tracks/java/exercises/roman-numerals/build.gradle
|
|
7631
7645
|
- tracks/java/exercises/roman-numerals/src/main/java/.keep
|
|
7632
7646
|
- tracks/java/exercises/roman-numerals/src/test/java/RomanNumeralsTest.java
|
|
7633
7647
|
- tracks/java/exercises/rotational-cipher/.meta/src/reference/java/RotationalCipher.java
|
|
7648
|
+
- tracks/java/exercises/rotational-cipher/.meta/version
|
|
7634
7649
|
- tracks/java/exercises/rotational-cipher/README.md
|
|
7635
7650
|
- tracks/java/exercises/rotational-cipher/build.gradle
|
|
7636
7651
|
- tracks/java/exercises/rotational-cipher/src/main/java/RotationalCipher.java
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import java.util.ArrayList;
|
|
2
|
-
import java.util.List;
|
|
3
|
-
|
|
4
|
-
class Crypto {
|
|
5
|
-
|
|
6
|
-
private String normalizedPlaintext;
|
|
7
|
-
private int squareSize;
|
|
8
|
-
|
|
9
|
-
Crypto(String text) {
|
|
10
|
-
this.normalizedPlaintext = normalizeText(text);
|
|
11
|
-
this.squareSize = calculateSquareSize(normalizedPlaintext);
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
String getNormalizedPlaintext() {
|
|
15
|
-
return normalizedPlaintext;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
int getSquareSize() {
|
|
19
|
-
return squareSize;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
private static String normalizeText(String text) {
|
|
23
|
-
return text.toLowerCase().codePoints()
|
|
24
|
-
.filter(x -> Character.isLetterOrDigit(x))
|
|
25
|
-
.collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
|
|
26
|
-
.toString();
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
private static int calculateSquareSize(String text) {
|
|
30
|
-
return (int) Math.ceil(Math.sqrt(text.length()));
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
List<String> getPlaintextSegments() {
|
|
34
|
-
return getSegmentText(normalizedPlaintext, squareSize);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
private static List<String> getSegmentText(String text, int squareSize) {
|
|
38
|
-
List<String> segments = new ArrayList<>();
|
|
39
|
-
int index = 0;
|
|
40
|
-
|
|
41
|
-
while (index < text.length()) {
|
|
42
|
-
if (index + squareSize < text.length()) {
|
|
43
|
-
segments.add(text.substring(index, index + squareSize));
|
|
44
|
-
} else {
|
|
45
|
-
segments.add(text.substring(index));
|
|
46
|
-
}
|
|
47
|
-
index += squareSize;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
return segments;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
String getCipherText() {
|
|
54
|
-
return getNormalizedCipherText().replaceAll("\\s", "");
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
String getNormalizedCipherText() {
|
|
58
|
-
StringBuilder cipherText = new StringBuilder(normalizedPlaintext.length());
|
|
59
|
-
|
|
60
|
-
for (int index = 0; index < squareSize; index++) {
|
|
61
|
-
for (String segment : getPlaintextSegments()) {
|
|
62
|
-
if (index < segment.length()) {
|
|
63
|
-
cipherText.append(segment.charAt(index));
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
if (index < squareSize - 1) {
|
|
68
|
-
cipherText.append(" ");
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
return cipherText.toString();
|
|
73
|
-
}
|
|
74
|
-
}
|