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.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trackler/version.rb +1 -1
  3. data/problem-specifications/exercises/atbash-cipher/canonical-data.json +38 -14
  4. data/problem-specifications/exercises/bracket-push/canonical-data.json +44 -16
  5. data/problem-specifications/exercises/change/canonical-data.json +46 -24
  6. data/problem-specifications/exercises/collatz-conjecture/canonical-data.json +20 -8
  7. data/problem-specifications/exercises/connect/canonical-data.json +87 -67
  8. data/problem-specifications/exercises/crypto-square/canonical-data.json +23 -9
  9. data/problem-specifications/exercises/diamond/canonical-data.json +16 -6
  10. data/problem-specifications/exercises/difference-of-squares/canonical-data.json +29 -11
  11. data/problem-specifications/exercises/dominoes/canonical-data.json +37 -13
  12. data/problem-specifications/exercises/flatten-array/canonical-data.json +19 -7
  13. data/problem-specifications/exercises/meetup/canonical-data.json +667 -477
  14. data/tracks/haskell/config.json +9 -0
  15. data/tracks/haskell/docs/LEARNING.md +3 -3
  16. data/tracks/haskell/exercises/food-chain/examples/success-standard/src/FoodChain.hs +1 -1
  17. data/tracks/haskell/exercises/forth/examples/success-standard/src/Forth.hs +2 -2
  18. data/tracks/haskell/exercises/parallel-letter-frequency/examples/success-standard/src/Frequency.hs +1 -1
  19. data/tracks/haskell/exercises/sgf-parsing/examples/success-standard/src/Sgf.hs +1 -1
  20. data/tracks/haskell/exercises/twelve-days/README.md +89 -0
  21. data/tracks/haskell/exercises/twelve-days/examples/success-standard/package.yaml +16 -0
  22. data/tracks/haskell/exercises/twelve-days/examples/success-standard/src/TwelveDays.hs +36 -0
  23. data/tracks/haskell/exercises/twelve-days/package.yaml +20 -0
  24. data/tracks/haskell/exercises/twelve-days/src/TwelveDays.hs +4 -0
  25. data/tracks/haskell/exercises/twelve-days/stack.yaml +1 -0
  26. data/tracks/haskell/exercises/twelve-days/test/Tests.hs +146 -0
  27. data/tracks/haskell/exercises/zipper/examples/success-standard/src/Zipper.hs +3 -3
  28. data/tracks/java/exercises/allergies/.meta/version +2 -0
  29. data/tracks/java/exercises/allergies/src/test/java/AllergiesTest.java +10 -65
  30. data/tracks/java/exercises/anagram/.meta/version +1 -0
  31. data/tracks/java/exercises/anagram/src/test/java/AnagramTest.java +36 -35
  32. data/tracks/java/exercises/atbash-cipher/.meta/version +1 -0
  33. data/tracks/java/exercises/atbash-cipher/src/test/java/AtbashTest.java +3 -2
  34. data/tracks/java/exercises/bob/.meta/src/reference/java/Bob.java +3 -0
  35. data/tracks/java/exercises/bob/.meta/version +1 -0
  36. data/tracks/java/exercises/bob/src/test/java/BobTest.java +79 -15
  37. data/tracks/java/exercises/crypto-square/.meta/src/reference/java/CryptoSquare.java +62 -0
  38. data/tracks/java/exercises/crypto-square/.meta/version +1 -0
  39. data/tracks/java/exercises/crypto-square/src/test/java/CryptoSquareTest.java +28 -101
  40. data/tracks/java/exercises/custom-set/.meta/version +1 -1
  41. data/tracks/java/exercises/custom-set/src/test/java/CustomSetTest.java +8 -0
  42. data/tracks/java/exercises/forth/.meta/version +1 -1
  43. data/tracks/java/exercises/forth/src/test/java/ForthEvaluatorTest.java +52 -12
  44. data/tracks/java/exercises/pascals-triangle/.meta/version +1 -1
  45. data/tracks/java/exercises/pascals-triangle/src/test/java/PascalsTriangleGeneratorTest.java +48 -0
  46. data/tracks/java/exercises/prime-factors/.meta/version +1 -0
  47. data/tracks/java/exercises/prime-factors/src/test/java/PrimeFactorsCalculatorTest.java +2 -6
  48. data/tracks/java/exercises/protein-translation/.meta/version +1 -1
  49. data/tracks/java/exercises/roman-numerals/.meta/version +1 -0
  50. data/tracks/java/exercises/roman-numerals/src/test/java/RomanNumeralsTest.java +0 -1
  51. data/tracks/java/exercises/rotational-cipher/.meta/version +1 -0
  52. data/tracks/java/exercises/rotational-cipher/src/test/java/RotationalCipherTest.java +7 -7
  53. data/tracks/javascript/.eslintignore +0 -1
  54. data/tracks/javascript/README.md +1 -1
  55. data/tracks/javascript/exercises/clock/example.js +8 -11
  56. metadata +18 -3
  57. data/tracks/java/exercises/crypto-square/.meta/src/reference/java/Crypto.java +0 -74
@@ -1 +1 @@
1
- 1.0.1
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.2.0
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 testDupCopiesTheTopValueOnTheStack() {
170
+ public void testDupCopiesAValueOnTheStack() {
179
171
  assertEquals(
180
172
  Arrays.asList(1, 1),
181
- forthEvaluator.evaluateProgram(Collections.singletonList("1 DUP")));
173
+ forthEvaluator.evaluateProgram(Collections.singletonList("1 dup")));
182
174
  }
183
175
 
184
176
  @Ignore("Remove to run test")
185
177
  @Test
186
- public void testDupParsingIsCaseInsensitive() {
178
+ public void testDupCopiesTopValueOnTheStack() {
187
179
  assertEquals(
188
180
  Arrays.asList(1, 2, 2),
189
- forthEvaluator.evaluateProgram(Collections.singletonList("1 2 Dup")));
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.0.0
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() {
@@ -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
- {27L, Arrays.asList(3L, 3L, 3L)},
30
- {625L, Arrays.asList(5L, 5L, 5L, 5L)},
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.0
1
+ 1.0.1
@@ -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"},
@@ -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() {
@@ -4,7 +4,6 @@ exercises/binary-search
4
4
  exercises/binary-search-tree
5
5
  exercises/bowling
6
6
  exercises/bracket-push
7
- exercises/clock
8
7
  exercises/custom-set
9
8
  exercises/flatten-array
10
9
  exercises/grade-school
@@ -1,4 +1,4 @@
1
- # JavaScript [![Build Status](https://travis-ci.org/exercism/javascript.svg?branch=master)](https://travis-ci.org/exercism/javascript)
1
+ # JavaScript [![Build Status](https://travis-ci.org/exercism/javascript.svg?branch=master)](https://travis-ci.org/exercism/javascript)[![Join the chat at https://gitter.im/exercism/xecmascript](https://badges.gitter.im/exercism/xecmascript.svg)](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 %= maxValue;
12
- time += maxValue;
13
- return time;
11
+ return time % maxValue + maxValue;
14
12
  }
15
13
 
16
- function at(hours, minutes) {
17
- minutes = minutes || 0;
18
- hours = makePositive(hours, HOURS_IN_A_DAY);
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 (minutes) {
35
- value += minutes * MILLIS_IN_A_MINUTE;
31
+ clock.plus = function (addMinutes) {
32
+ value += addMinutes * MILLIS_IN_A_MINUTE;
36
33
  return clock;
37
34
  };
38
35
 
39
- clock.minus = function (minutes) {
40
- value -= minutes * MILLIS_IN_A_MINUTE;
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.84
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-03 00:00:00.000000000 Z
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/Crypto.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
- }