trackler 2.0.8.49 → 2.0.8.50

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 48201089c77e7b81845af6440956854c37235757
4
- data.tar.gz: c8df11ee44d68548e4dc45916eb772d42db76d18
3
+ metadata.gz: 2b20ae176f6c856990f4e8c19aba7f9a57413eb0
4
+ data.tar.gz: 9caaf6ade8db9ed4f780f70fe1f00bd7d3db67fd
5
5
  SHA512:
6
- metadata.gz: 8c8ee5ad1aa4951cc1960e272f54ee5928757809050c731a15c4c68c76031b1ec7410315dd58479dea955c5f889fdcfd9cf2bcb35c3676c912df549b317cd59f
7
- data.tar.gz: 8871ec457aebdc4366e1c910a2a2fdf95a44e309d32ea9d113435f3d5f23f2c5d2e9913e19708dd13f72460d5163a6f45f3682f89ecaea041fb4bef555c6d159
6
+ metadata.gz: 72764fd62759d31ac5d878b4018ffb622f498301c619a63a7d8969bbc01508197639bc5c2e9ee7f09118b8d254f63ad777109a7f8094f4f8c5a421c6b2ba2862
7
+ data.tar.gz: ea4f65efe06b9679130b05197cd1e0f32c09c4f764b487693321ce9d9a999a4ea461c22d3d18cd90b88186761adcd53f0c0c77836e1aa2564ef674b7c08e8650
@@ -1,3 +1,3 @@
1
1
  module Trackler
2
- VERSION = "2.0.8.49"
2
+ VERSION = "2.0.8.50"
3
3
  end
File without changes
@@ -0,0 +1,8 @@
1
+ # Issues or Pull Requests with these labels will never be considered stale
2
+ exemptLabels:
3
+ - "first-timers only"
4
+ - "good first patch"
5
+ - "policy"
6
+
7
+ # Label to use when marking as stale
8
+ staleLabel: stale
@@ -1,61 +1,57 @@
1
- import java.awt.print.Printable;
2
1
  import java.util.ArrayList;
3
- import java.util.Arrays;
4
2
  import java.util.List;
5
3
  import java.util.stream.Collectors;
6
4
 
7
- public class Bookstore{
5
+ class Bookstore {
8
6
 
9
- private static int BOOK_PRICE = 8, MAX_GROUP_SIZE = 5;
10
- private List<Integer> books;
11
- private static double[] DISCOUNT_TIERS = {0,5,10,20,25};
7
+ private static final int BOOK_PRICE = 8, MAX_GROUP_SIZE = 5;
12
8
 
13
- public Bookstore (List<Integer> books){
14
- this.books = books;
15
- }
16
-
9
+ private static double[] DISCOUNT_TIERS = {0, 5, 10, 20, 25};
17
10
 
11
+ private List<Integer> books;
18
12
 
13
+ Bookstore(List<Integer> books) {
14
+ this.books = books;
15
+ }
19
16
 
20
- public double calculateTotalCost(){
21
- return calculateTotalCost(this.books,0);
22
- }
17
+ double calculateTotalCost() {
18
+ return calculateTotalCost(this.books, 0);
19
+ }
23
20
 
24
- private double calculateTotalCost (List<Integer> books,double priceSoFar ){
25
- double minPrice = Double.MAX_VALUE;
21
+ private double calculateTotalCost(List<Integer> books, double priceSoFar) {
22
+ if (books.size() == 0) {
23
+ return priceSoFar;
24
+ }
26
25
 
26
+ List<Integer> availableBookNumbers = books.stream()
27
+ .distinct()
28
+ .collect(Collectors.toList());
27
29
 
28
- if(books.size() == 0){
29
- return priceSoFar;
30
- }
30
+ double minPrice = Double.MAX_VALUE;
31
31
 
32
- List<Integer> groups = (ArrayList<Integer>) books.stream().distinct().collect(Collectors.toList());
32
+ for (int i = 0; i < availableBookNumbers.size(); i++) {
33
+ List<Integer> newGroupBooks = new ArrayList<>(availableBookNumbers.subList(0, i + 1));
34
+ List<Integer> remainingBooks = new ArrayList<>(books);
33
35
 
34
-
35
- double price = 0;
36
+ for (final Integer newGroupBook : newGroupBooks) {
37
+ //noinspection UseBulkOperation - we want to remove _one_ of each book number, not _all_ of each book number.
38
+ remainingBooks.remove(newGroupBook);
39
+ }
36
40
 
37
- for(int i = 0;i<groups.size();i++){
38
- books.remove(groups.get(i));
39
- }
40
-
41
- try {
42
- price = calculateTotalCost(books,priceSoFar + costPerGroup(groups.size()));
43
- } catch (Exception e) {
44
- e.printStackTrace();
45
- }
46
-
47
- minPrice = Math.min(minPrice, price);
48
- return minPrice;
41
+ double price = calculateTotalCost(remainingBooks, priceSoFar + costOfGroupSize(newGroupBooks.size()));
49
42
 
43
+ minPrice = Math.min(minPrice, price);
44
+ }
50
45
 
51
- }
46
+ return minPrice;
47
+ }
52
48
 
53
- private double costPerGroup(int groupSize) throws Exception{
54
- if (groupSize < 1 || groupSize > MAX_GROUP_SIZE){
55
- throw new Exception("Invalid group size : " + groupSize );
56
- }
57
- return BOOK_PRICE * groupSize * (100 - DISCOUNT_TIERS[groupSize-1])/100;
58
- }
49
+ private double costOfGroupSize(int groupSize) {
50
+ if (groupSize < 1 || groupSize > MAX_GROUP_SIZE) {
51
+ throw new IllegalStateException("Invalid group size : " + groupSize);
52
+ }
59
53
 
54
+ return BOOK_PRICE * groupSize * (100 - DISCOUNT_TIERS[groupSize - 1]) / 100;
55
+ }
60
56
 
61
57
  }
@@ -1,5 +1,6 @@
1
1
  import static org.junit.Assert.assertEquals;
2
2
 
3
+ import java.util.Collections;
3
4
  import java.util.List;
4
5
  import java.util.ArrayList;
5
6
  import java.util.Arrays;
@@ -7,112 +8,112 @@ import java.util.Arrays;
7
8
  import org.junit.Ignore;
8
9
  import org.junit.Test;
9
10
 
10
- public class BookstoreTest{
11
-
12
- @Test
13
- public void onlyASingleBook(){
14
- List<Integer> books = new ArrayList<>(Arrays.asList(1));
15
- Bookstore bookstore = new Bookstore(books);
16
- assertEquals(8,bookstore.calculateTotalCost(),2);
17
- }
18
-
19
- @Ignore
20
- @Test
21
- public void twoOfSameBook(){
22
- List<Integer> books = new ArrayList<>(Arrays.asList(1,1));
23
- Bookstore bookstore = new Bookstore(books);
24
- assertEquals(16,bookstore.calculateTotalCost(),2);
25
- }
26
-
27
- @Ignore
28
- @Test
29
- public void emptyBasket(){
30
- List<Integer> books = new ArrayList<>();
31
- Bookstore bookstore = new Bookstore(books);
32
- assertEquals(0,bookstore.calculateTotalCost(),2);
33
- }
34
-
35
- @Ignore
36
- @Test
37
- public void twoDifferentBooks(){
38
- List<Integer> books = new ArrayList<>(Arrays.asList(1,2));
39
- Bookstore bookstore = new Bookstore(books);
40
- assertEquals(15.20,bookstore.calculateTotalCost(),2);
41
- }
42
-
43
- @Ignore
44
- @Test
45
- public void threeDifferentBooks(){
46
- List<Integer> books = new ArrayList<>(Arrays.asList(1,2,3));
47
- Bookstore bookstore = new Bookstore(books);
48
- assertEquals(21.6,bookstore.calculateTotalCost(),2);
49
- }
50
-
51
- @Ignore
52
- @Test
53
- public void fourDifferentBooks(){
54
- ArrayList<Integer> books = new ArrayList<>(Arrays.asList(1,2,3,4));
55
- Bookstore bookstore = new Bookstore(books);
56
- assertEquals(25.6,bookstore.calculateTotalCost(),2);
57
-
58
- }
59
-
60
- @Ignore
61
- @Test
62
- public void fiveDifferentBooks(){
63
- ArrayList<Integer> books = new ArrayList<>(Arrays.asList(1,2,3,4,5));
64
- Bookstore bookstore = new Bookstore(books);
65
- assertEquals(30,bookstore.calculateTotalCost(),2);
66
- }
67
-
68
- @Ignore
69
- @Test
70
- public void twoGroupsOfFourIsCheaperThanGroupOfFivePlusGroupOfThree(){
71
- List<Integer> books = new ArrayList<>(Arrays.asList(1,1,2,2,3,3,4,5));
72
- Bookstore bookstore = new Bookstore(books);
73
- assertEquals(51.20,bookstore.calculateTotalCost(),2);
74
- }
75
-
76
- @Ignore
77
- @Test
78
- public void groupOfFourPlusGroupOfTwoIsCheaperThanTwoGroupsOfThree(){
79
- List<Integer> books = new ArrayList<>(Arrays.asList(1,1,2,2,3,4));
80
- Bookstore bookstore = new Bookstore(books);
81
- assertEquals(40.8,bookstore.calculateTotalCost(),2);
82
- }
83
-
84
- @Ignore
85
- @Test
86
- public void twoEachOfFirst4BooksAnd1CopyEachOfRest(){
87
- Integer[] p = {1,1,2,2,3,3,4,4,5};
88
- List<Integer> books = new ArrayList<>(Arrays.asList(1,1,2,2,3,3,4,4,5));
89
- Bookstore bookstore = new Bookstore(books);
90
- assertEquals(55.60,bookstore.calculateTotalCost(),2);
91
- }
92
-
93
- @Ignore
94
- @Test
95
- public void twoCopiesOfEachBook(){
96
- List<Integer> books = new ArrayList<>(Arrays.asList(1,1,2,2,3,3,4,4,5,5));
97
- Bookstore bookstore = new Bookstore(books);
98
- assertEquals(60.00,bookstore.calculateTotalCost(),2);
99
- }
100
-
101
- @Ignore
102
- @Test
103
- public void threeCopiesOfFirstBookAnd2EachOfRemaining(){
104
- List<Integer> books = new ArrayList<>(Arrays.asList(1,1,2,2,3,3,4,4,5,5,1));
105
- Bookstore bookstore = new Bookstore(books);
106
- assertEquals(68.00,bookstore.calculateTotalCost(),2);
107
- }
108
-
109
- @Ignore
110
- @Test
111
- public void threeEachOFirst2BooksAnd2EachOfRemainingBooks(){
112
- List<Integer> books = new ArrayList<>(Arrays.asList(1,1,2,2,3,3,4,4,5,5,1,2));
113
- Bookstore bookstore = new Bookstore(books);
114
- assertEquals(75.20,bookstore.calculateTotalCost(),2);
115
- }
11
+ public class BookstoreTest {
12
+
13
+ // This is sufficient accuracy since we're handling currency values, which should be equal to within 2 decimal places.
14
+ private static final double EQUALITY_TOLERANCE = 0.001;
15
+
16
+ @Test
17
+ public void onlyASingleBook() {
18
+ List<Integer> books = new ArrayList<>(Collections.singletonList(1));
19
+ Bookstore bookstore = new Bookstore(books);
20
+ assertEquals(8, bookstore.calculateTotalCost(), EQUALITY_TOLERANCE);
21
+ }
22
+
23
+ @Ignore
24
+ @Test
25
+ public void twoOfSameBook() {
26
+ List<Integer> books = new ArrayList<>(Arrays.asList(1, 1));
27
+ Bookstore bookstore = new Bookstore(books);
28
+ assertEquals(16, bookstore.calculateTotalCost(), EQUALITY_TOLERANCE);
29
+ }
30
+
31
+ @Ignore
32
+ @Test
33
+ public void emptyBasket() {
34
+ List<Integer> books = new ArrayList<>();
35
+ Bookstore bookstore = new Bookstore(books);
36
+ assertEquals(0, bookstore.calculateTotalCost(), EQUALITY_TOLERANCE);
37
+ }
38
+
39
+ @Ignore
40
+ @Test
41
+ public void twoDifferentBooks() {
42
+ List<Integer> books = new ArrayList<>(Arrays.asList(1, 2));
43
+ Bookstore bookstore = new Bookstore(books);
44
+ assertEquals(15.20, bookstore.calculateTotalCost(), EQUALITY_TOLERANCE);
45
+ }
46
+
47
+ @Ignore
48
+ @Test
49
+ public void threeDifferentBooks() {
50
+ List<Integer> books = new ArrayList<>(Arrays.asList(1, 2, 3));
51
+ Bookstore bookstore = new Bookstore(books);
52
+ assertEquals(21.6, bookstore.calculateTotalCost(), EQUALITY_TOLERANCE);
53
+ }
54
+
55
+ @Ignore
56
+ @Test
57
+ public void fourDifferentBooks() {
58
+ List<Integer> books = new ArrayList<>(Arrays.asList(1, 2, 3, 4));
59
+ Bookstore bookstore = new Bookstore(books);
60
+ assertEquals(25.6, bookstore.calculateTotalCost(), EQUALITY_TOLERANCE);
61
+ }
62
+
63
+ @Ignore
64
+ @Test
65
+ public void fiveDifferentBooks() {
66
+ List<Integer> books = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
67
+ Bookstore bookstore = new Bookstore(books);
68
+ assertEquals(30, bookstore.calculateTotalCost(), EQUALITY_TOLERANCE);
69
+ }
70
+
71
+ @Ignore
72
+ @Test
73
+ public void twoGroupsOfFourIsCheaperThanGroupOfFivePlusGroupOfThree() {
74
+ List<Integer> books = new ArrayList<>(Arrays.asList(1, 1, 2, 2, 3, 3, 4, 5));
75
+ Bookstore bookstore = new Bookstore(books);
76
+ assertEquals(51.20, bookstore.calculateTotalCost(), EQUALITY_TOLERANCE);
77
+ }
78
+
79
+ @Ignore
80
+ @Test
81
+ public void groupOfFourPlusGroupOfTwoIsCheaperThanTwoGroupsOfThree() {
82
+ List<Integer> books = new ArrayList<>(Arrays.asList(1, 1, 2, 2, 3, 4));
83
+ Bookstore bookstore = new Bookstore(books);
84
+ assertEquals(40.8, bookstore.calculateTotalCost(), EQUALITY_TOLERANCE);
85
+ }
86
+
87
+ @Ignore
88
+ @Test
89
+ public void twoEachOfFirst4BooksAnd1CopyEachOfRest() {
90
+ List<Integer> books = new ArrayList<>(Arrays.asList(1, 1, 2, 2, 3, 3, 4, 4, 5));
91
+ Bookstore bookstore = new Bookstore(books);
92
+ assertEquals(55.60, bookstore.calculateTotalCost(), EQUALITY_TOLERANCE);
93
+ }
94
+
95
+ @Ignore
96
+ @Test
97
+ public void twoCopiesOfEachBook() {
98
+ List<Integer> books = new ArrayList<>(Arrays.asList(1, 1, 2, 2, 3, 3, 4, 4, 5, 5));
99
+ Bookstore bookstore = new Bookstore(books);
100
+ assertEquals(60.00, bookstore.calculateTotalCost(), EQUALITY_TOLERANCE);
101
+ }
102
+
103
+ @Ignore
104
+ @Test
105
+ public void threeCopiesOfFirstBookAnd2EachOfRemaining() {
106
+ List<Integer> books = new ArrayList<>(Arrays.asList(1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 1));
107
+ Bookstore bookstore = new Bookstore(books);
108
+ assertEquals(68.00, bookstore.calculateTotalCost(), EQUALITY_TOLERANCE);
109
+ }
110
+
111
+ @Ignore
112
+ @Test
113
+ public void threeEachOFirst2BooksAnd2EachOfRemainingBooks() {
114
+ List<Integer> books = new ArrayList<>(Arrays.asList(1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 1, 2));
115
+ Bookstore bookstore = new Bookstore(books);
116
+ assertEquals(75.20, bookstore.calculateTotalCost(), EQUALITY_TOLERANCE);
117
+ }
116
118
 
117
119
  }
118
-
@@ -1,8 +1,8 @@
1
1
  import java.util.*;
2
2
 
3
- public class Palindromes {
3
+ public class PalindromeCalculator {
4
4
 
5
- public static SortedMap<Long, List<List<Integer>>> getPalindromeProductsWithFactors(int minFactor, int maxFactor) {
5
+ public SortedMap<Long, List<List<Integer>>> getPalindromeProductsWithFactors(int minFactor, int maxFactor) {
6
6
  SortedMap<Long, List<List<Integer>>> palindromeSortedList = new TreeMap<>();
7
7
  long num;
8
8
  List<List<Integer>> factors;
@@ -23,7 +23,7 @@ public class Palindromes {
23
23
  }
24
24
 
25
25
  // http://stackoverflow.com/questions/23984654/how-to-print-all-palindromes-upto-1000-without-using-any-string-stringbuilder
26
- private static long reverseNumber(long number) {
26
+ private long reverseNumber(long number) {
27
27
  if (number < 10l) {
28
28
  return number;
29
29
  }
@@ -37,7 +37,7 @@ public class Palindromes {
37
37
  return result;
38
38
  }
39
39
 
40
- private static boolean isPalindrome(long number) {
40
+ private boolean isPalindrome(long number) {
41
41
  return number == reverseNumber(number);
42
42
  }
43
43
  }
@@ -1,3 +1,4 @@
1
+ import org.junit.Before;
1
2
  import org.junit.Ignore;
2
3
  import org.junit.Test;
3
4
 
@@ -9,7 +10,13 @@ import java.util.stream.Collectors;
9
10
 
10
11
  import static junit.framework.TestCase.*;
11
12
 
12
- public class PalindromesTest {
13
+ public class PalindromeCalculatorTest {
14
+ private PalindromeCalculator palindromeCalculator;
15
+
16
+ @Before
17
+ public void setup() {
18
+ palindromeCalculator = new PalindromeCalculator();
19
+ }
13
20
 
14
21
  @Test
15
22
  public void largestPalindromeFromSingleDigitFactors() {
@@ -21,7 +28,7 @@ public class PalindromesTest {
21
28
  );
22
29
  final long expectedValue = 9l;
23
30
 
24
- final SortedMap<Long, List<List<Integer>>> palindromes = Palindromes.getPalindromeProductsWithFactors(1, 9);
31
+ final SortedMap<Long, List<List<Integer>>> palindromes = palindromeCalculator.getPalindromeProductsWithFactors(1, 9);
25
32
 
26
33
  checkPalindromeWithFactorsMatchesExpected(expected, expectedValue, palindromes, palindromes.lastKey());
27
34
  }
@@ -36,7 +43,7 @@ public class PalindromesTest {
36
43
  );
37
44
  final long expectedValue = 9009l;
38
45
 
39
- final SortedMap<Long, List<List<Integer>>> palindromes = Palindromes.getPalindromeProductsWithFactors(10, 99);
46
+ final SortedMap<Long, List<List<Integer>>> palindromes = palindromeCalculator.getPalindromeProductsWithFactors(10, 99);
40
47
 
41
48
  checkPalindromeWithFactorsMatchesExpected(expected, expectedValue, palindromes, palindromes.lastKey());
42
49
  }
@@ -51,7 +58,7 @@ public class PalindromesTest {
51
58
  );
52
59
  final long expectedValue = 121l;
53
60
 
54
- final SortedMap<Long, List<List<Integer>>> palindromes = Palindromes.getPalindromeProductsWithFactors(10, 99);
61
+ final SortedMap<Long, List<List<Integer>>> palindromes = palindromeCalculator.getPalindromeProductsWithFactors(10, 99);
55
62
 
56
63
  checkPalindromeWithFactorsMatchesExpected(expected, expectedValue, palindromes, palindromes.firstKey());
57
64
  }
@@ -66,7 +73,7 @@ public class PalindromesTest {
66
73
  );
67
74
  final long expectedValue = 906609l;
68
75
 
69
- final SortedMap<Long, List<List<Integer>>> palindromes = Palindromes.getPalindromeProductsWithFactors(100, 999);
76
+ final SortedMap<Long, List<List<Integer>>> palindromes = palindromeCalculator.getPalindromeProductsWithFactors(100, 999);
70
77
 
71
78
  checkPalindromeWithFactorsMatchesExpected(expected, expectedValue, palindromes, palindromes.lastKey());
72
79
  }
@@ -81,7 +88,7 @@ public class PalindromesTest {
81
88
  );
82
89
  final long expectedValue = 10201l;
83
90
 
84
- final SortedMap<Long, List<List<Integer>>> palindromes = Palindromes.getPalindromeProductsWithFactors(100, 999);
91
+ final SortedMap<Long, List<List<Integer>>> palindromes = palindromeCalculator.getPalindromeProductsWithFactors(100, 999);
85
92
 
86
93
  checkPalindromeWithFactorsMatchesExpected(expected, expectedValue, palindromes, palindromes.firstKey());
87
94
  }
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env bash
2
+
3
+ for EXERCISE_DIRECTORY in $(find exercises -mindepth 2 -maxdepth 2 -type d -name "src"); do
4
+ STARTER_DIRECTORY="${EXERCISE_DIRECTORY}/main/java"
5
+ STARTER_FILE_COUNT=$(find "${STARTER_DIRECTORY}" -mindepth 1 -maxdepth 1 -type f -name "*.java" | wc -l)
6
+ KEEP_FILE_LOCATION="${STARTER_DIRECTORY}/.keep"
7
+
8
+ if (( ${STARTER_FILE_COUNT} > 0 )) && [[ -f "${KEEP_FILE_LOCATION}" ]]; then
9
+ echo "Removing unnecessary keep file ${KEEP_FILE_LOCATION}..."
10
+ rm "${KEEP_FILE_LOCATION}"
11
+ fi
12
+ done
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.0.8.49
4
+ version: 2.0.8.50
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-04-13 00:00:00.000000000 Z
11
+ date: 2017-04-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyzip
@@ -2433,6 +2433,7 @@ files:
2433
2433
  - tracks/elisp/exercises/word-count/word-count.el
2434
2434
  - tracks/elisp/img/icon.png
2435
2435
  - tracks/elixir/.git
2436
+ - tracks/elixir/.github/stale.yml
2436
2437
  - tracks/elixir/.gitignore
2437
2438
  - tracks/elixir/.travis.yml
2438
2439
  - tracks/elixir/LICENSE
@@ -4275,6 +4276,7 @@ files:
4275
4276
  - tracks/idris/img/icon.png
4276
4277
  - tracks/java/.Rhistory
4277
4278
  - tracks/java/.git
4279
+ - tracks/java/.github/stale.yml
4278
4280
  - tracks/java/.gitignore
4279
4281
  - tracks/java/.keep
4280
4282
  - tracks/java/.travis.yml
@@ -4463,9 +4465,9 @@ files:
4463
4465
  - tracks/java/exercises/octal/src/main/java/.keep
4464
4466
  - tracks/java/exercises/octal/src/test/java/OctalTest.java
4465
4467
  - tracks/java/exercises/palindrome-products/build.gradle
4466
- - tracks/java/exercises/palindrome-products/src/example/java/Palindromes.java
4468
+ - tracks/java/exercises/palindrome-products/src/example/java/PalindromeCalculator.java
4467
4469
  - tracks/java/exercises/palindrome-products/src/main/java/.keep
4468
- - tracks/java/exercises/palindrome-products/src/test/java/PalindromesTest.java
4470
+ - tracks/java/exercises/palindrome-products/src/test/java/PalindromeCalculatorTest.java
4469
4471
  - tracks/java/exercises/pangram/build.gradle
4470
4472
  - tracks/java/exercises/pangram/src/example/java/PangramChecker.java
4471
4473
  - tracks/java/exercises/pangram/src/main/java/PangramChecker.java
@@ -4604,6 +4606,7 @@ files:
4604
4606
  - tracks/java/img/icon.png
4605
4607
  - tracks/java/scripts/increase-test-logging.sh
4606
4608
  - tracks/java/scripts/insert-ignores.sh
4609
+ - tracks/java/scripts/prune-extra-keep-files.sh
4607
4610
  - tracks/javascript/.editorconfig
4608
4611
  - tracks/javascript/.git
4609
4612
  - tracks/javascript/.gitignore