From 5c6d4e98af79d60fc12d93bbfba6b9dac8406b8f Mon Sep 17 00:00:00 2001 From: Diego Leonardo Urban Date: Fri, 6 Nov 2026 16:54:31 +0100 Subject: [PATCH 1/2] Add final to parameters, locals, fields and static-only classes 872 final modifiers added (OpenRewrite FinalizeMethodArguments, FinalizeLocalVariables, FinalizePrivateFields and FinalClass, plus for-each variables and a few parameters by hand). Nothing else changed: with every final keyword and all whitespace removed, each file is identical to before. No parameter is reassigned anywhere, so none had to stay non-final. Co-Authored-By: Claude Opus 5.5 --- .../algorithms/datastructure/Element.java | 8 +- .../datastructure/array/ArrayUtils.java | 12 +- .../binarytree/BinaryTreeNode.java | 6 +- .../datastructure/linkedlist/LinkedList.java | 24 +- .../linkedlist/LinkedListNode.java | 6 +- .../algorithms/datastructure/queue/Queue.java | 2 +- .../algorithms/datastructure/set/Set.java | 20 +- .../algorithms/datastructure/stack/Stack.java | 2 +- .../datastructure/vector/Vector.java | 2 +- .../diegourban/algorithms/io/Reader.java | 12 +- .../algorithms/math/Combinatorics.java | 6 +- .../diegourban/algorithms/math/Geometry.java | 46 +-- .../algorithms/math/Measurement.java | 6 +- .../algorithms/math/NumberTheory.java | 22 +- .../diegourban/algorithms/math/Numbers.java | 12 +- .../diegourban/algorithms/math/Sequences.java | 14 +- .../algorithms/math/Statistics.java | 16 +- .../algorithms/math/TriangleType.java | 4 +- .../algorithms/search/BinarySearch.java | 2 +- .../algorithms/sorting/InsertionSort.java | 4 +- .../algorithms/sorting/SelectionSort.java | 4 +- .../algorithms/string/StringUtils.java | 18 +- .../datastructure/array/ArrayUtilsTest.java | 8 +- .../linkedlist/LinkedListTest.java | 32 +- .../datastructure/queue/QueueTest.java | 2 +- .../algorithms/datastructure/set/SetTest.java | 8 +- .../datastructure/stack/StackTest.java | 8 +- .../datastructure/vector/VectorTest.java | 18 +- .../diegourban/algorithms/io/ReaderTest.java | 280 +++++++++--------- .../math/NumberTheoryPropertyTest.java | 24 +- .../algorithms/math/NumberTheoryTest.java | 12 +- .../math/SequencesPropertyTest.java | 10 +- .../math/StatisticsPropertyTest.java | 25 +- .../algorithms/math/TriangleTypeTest.java | 2 +- .../problems/bit/DeltaBitsTest.java | 4 +- .../problems/bit/FindUniqueIdTest.java | 4 +- .../algorithms/problems/bit/ParityTest.java | 6 +- .../problems/bit/ToCarryOrNotToCarryTest.java | 14 +- .../array/EqualSidesOfAnArrayTest.java | 6 +- .../array/LargestDifferenceTest.java | 2 +- .../array/SingleRiffleCheckTest.java | 4 +- .../array/TheForceAwakensTest.java | 28 +- .../graph/GraphColoringTest.java | 33 ++- .../datastructure/graph/MeshMessageTest.java | 26 +- .../linkedlist/DeleteNodeTest.java | 12 +- .../linkedlist/FindRepeatBeastModeTest.java | 6 +- .../linkedlist/LinkedListCycleTest.java | 12 +- .../MergeSortedLinkedListsTest.java | 16 +- .../linkedlist/ReverseLinkedListTest.java | 8 +- .../datastructure/map/DroughtTest.java | 32 +- .../map/NumberFrequencyTest.java | 18 +- .../queue/QueueTwoStacksTest.java | 10 +- .../set/InflightEntertainmentTest.java | 6 +- .../set/PermutationPalindromeTest.java | 6 +- .../datastructure/set/TwiceLinearTest.java | 6 +- .../stack/BracketValidatorTest.java | 8 +- .../stack/DiamondsAndSandTest.java | 16 +- .../datastructure/stack/LargestStackTest.java | 12 +- .../stack/ParenthesisBalanceTest.java | 14 +- .../tree/BalancedBinaryTreeTest.java | 20 +- .../tree/BinarySearchTreeCheckerTest.java | 24 +- .../tree/SecondLargestItemInBstTest.java | 16 +- .../trie/MillionGazillionTest.java | 4 +- .../algorithms/problems/dp/CakeThiefTest.java | 12 +- .../greedy/BanknotesAndCoinsTest.java | 17 +- .../problems/math/CollectableCardsTest.java | 14 +- .../problems/math/CommonDenominatorsTest.java | 9 +- .../problems/math/DivisorsTest.java | 6 +- .../problems/math/EasyLineTest.java | 4 +- .../problems/math/FactorialSumTest.java | 14 +- .../problems/math/FibonacciArrayTest.java | 6 +- .../problems/math/PascalsTriangleTest.java | 6 +- .../problems/math/PerfectNumberTest.java | 6 +- .../algorithms/problems/math/PrefaceTest.java | 6 +- .../problems/math/PrimeGeneratorTest.java | 26 +- .../problems/math/PrimeNumberTest.java | 6 +- .../problems/math/PrimesInNumbersTest.java | 8 +- .../algorithms/problems/math/QueenTest.java | 20 +- .../problems/math/RainfallTest.java | 13 +- .../problems/math/RectangularLoveTest.java | 13 +- .../problems/math/RomanNumeralsTest.java | 6 +- .../problems/math/SumByFactorsTest.java | 10 +- .../problems/math/TdaRationalTest.java | 9 +- .../problems/math/TripleDoubleTest.java | 8 +- .../recursion/CollatzConjectureTest.java | 4 +- .../RecursiveStringPermutationsTest.java | 10 +- .../recursion/SquareRootOfTwoTest.java | 8 +- .../problems/search/FindRepeatTest.java | 8 +- .../search/FindRotationPointTest.java | 6 +- .../problems/search/TwoBillsTest.java | 16 +- .../problems/simulation/MaestersMapTest.java | 24 +- .../problems/simulation/StarTrekTest.java | 20 +- .../problems/sorting/FindTheOddIntTest.java | 6 +- .../problems/string/ContractRevisionTest.java | 16 +- .../problems/string/EncryptionTest.java | 18 +- .../algorithms/problems/string/MorseTest.java | 6 +- .../problems/string/OneTwoThreeTest.java | 14 +- .../string/ParenthesisMatchingTest.java | 2 +- .../string/PlayingWithPassphrasesTest.java | 10 +- .../problems/string/ReverseWordsTest.java | 8 +- .../string/SearchingSubsequencesTest.java | 18 +- .../search/BinarySearchPropertyTest.java | 8 +- .../sorting/SorterPropertyTest.java | 4 +- .../algorithms/sorting/SorterTest.java | 10 +- .../string/StringUtilsPropertyTest.java | 20 +- .../algorithms/testing/SampleBuilder.java | 16 +- .../algorithms/testing/SampleBuilderTest.java | 42 +-- .../algorithms/testing/SampleLoader.java | 8 +- 108 files changed, 793 insertions(+), 778 deletions(-) diff --git a/src/main/java/io/github/diegourban/algorithms/datastructure/Element.java b/src/main/java/io/github/diegourban/algorithms/datastructure/Element.java index bbd7fae..64d14f5 100644 --- a/src/main/java/io/github/diegourban/algorithms/datastructure/Element.java +++ b/src/main/java/io/github/diegourban/algorithms/datastructure/Element.java @@ -2,9 +2,9 @@ public class Element { - private String name; + private final String name; - public Element(String name) { + public Element(final String name) { this.name = name; } @@ -13,11 +13,11 @@ public String getName() { } @Override - public boolean equals(Object obj) { + public boolean equals(final Object obj) { if (obj == null) { return false; } - Element other = (Element) obj; + final Element other = (Element) obj; return other.getName().equals(this.getName()); } diff --git a/src/main/java/io/github/diegourban/algorithms/datastructure/array/ArrayUtils.java b/src/main/java/io/github/diegourban/algorithms/datastructure/array/ArrayUtils.java index 91f9738..3b69505 100644 --- a/src/main/java/io/github/diegourban/algorithms/datastructure/array/ArrayUtils.java +++ b/src/main/java/io/github/diegourban/algorithms/datastructure/array/ArrayUtils.java @@ -2,11 +2,11 @@ import java.util.Random; -public class ArrayUtils { +public final class ArrayUtils { private ArrayUtils() {} - private static Random rand = new Random(); + private static final Random rand = new Random(); /** * Function for doing an in-place ↴ shuffle of an array. @@ -19,7 +19,7 @@ private ArrayUtils() {} * * @param theArray the array to shuffle */ - public static void shuffle(int[] theArray) { + public static void shuffle(final int[] theArray) { // if it's 1 or 0 items, just return if (theArray.length <= 1) { return; @@ -32,18 +32,18 @@ public static void shuffle(int[] theArray) { // (could also be the item currently in that spot) // must be an item AFTER the current item, because the stuff // before has all already been placed - int randomChoiceIndex = getRandom(indexWeAreChoosingFor, theArray.length - 1); + final int randomChoiceIndex = getRandom(indexWeAreChoosingFor, theArray.length - 1); // place our random choice in the spot by swapping if (randomChoiceIndex != indexWeAreChoosingFor) { - int valueAtIndexWeChoseFor = theArray[indexWeAreChoosingFor]; + final int valueAtIndexWeChoseFor = theArray[indexWeAreChoosingFor]; theArray[indexWeAreChoosingFor] = theArray[randomChoiceIndex]; theArray[randomChoiceIndex] = valueAtIndexWeChoseFor; } } } - private static int getRandom(int floor, int ceiling) { + private static int getRandom(final int floor, final int ceiling) { return rand.nextInt((ceiling - floor) + 1) + floor; } } diff --git a/src/main/java/io/github/diegourban/algorithms/datastructure/binarytree/BinaryTreeNode.java b/src/main/java/io/github/diegourban/algorithms/datastructure/binarytree/BinaryTreeNode.java index 3e23fbb..cbda92c 100644 --- a/src/main/java/io/github/diegourban/algorithms/datastructure/binarytree/BinaryTreeNode.java +++ b/src/main/java/io/github/diegourban/algorithms/datastructure/binarytree/BinaryTreeNode.java @@ -6,16 +6,16 @@ public class BinaryTreeNode { public BinaryTreeNode left; public BinaryTreeNode right; - public BinaryTreeNode(int value) { + public BinaryTreeNode(final int value) { this.value = value; } - public BinaryTreeNode insertLeft(int leftValue) { + public BinaryTreeNode insertLeft(final int leftValue) { this.left = new BinaryTreeNode(leftValue); return this.left; } - public BinaryTreeNode insertRight(int rightValue) { + public BinaryTreeNode insertRight(final int rightValue) { this.right = new BinaryTreeNode(rightValue); return this.right; } diff --git a/src/main/java/io/github/diegourban/algorithms/datastructure/linkedlist/LinkedList.java b/src/main/java/io/github/diegourban/algorithms/datastructure/linkedlist/LinkedList.java index c90dd0e..3e62bb9 100644 --- a/src/main/java/io/github/diegourban/algorithms/datastructure/linkedlist/LinkedList.java +++ b/src/main/java/io/github/diegourban/algorithms/datastructure/linkedlist/LinkedList.java @@ -10,11 +10,11 @@ public class LinkedList { public void addAtStart(final Element element) { if (this.totalElements == 0) { - LinkedListNode newNode = new LinkedListNode(element); + final LinkedListNode newNode = new LinkedListNode(element); this.first = newNode; this.last = newNode; } else { - LinkedListNode newNode = new LinkedListNode(element, this.first); + final LinkedListNode newNode = new LinkedListNode(element, this.first); this.first.setPrevious(newNode); this.first = newNode; } @@ -26,7 +26,7 @@ public void addAtEnd(final Element element) { if (this.totalElements == 0) { addAtStart(element); } else { - LinkedListNode newNode = new LinkedListNode(element); + final LinkedListNode newNode = new LinkedListNode(element); this.last.setNext(newNode); newNode.setPrevious(this.last); this.last = newNode; @@ -41,10 +41,10 @@ public void add(final int position, final Element element) { } else if (position == this.totalElements) { addAtEnd(element); } else { - LinkedListNode previous = this.getNode(position - 1); - LinkedListNode next = previous.getNext(); + final LinkedListNode previous = this.getNode(position - 1); + final LinkedListNode next = previous.getNext(); - LinkedListNode newNode = new LinkedListNode(element, previous.getNext()); + final LinkedListNode newNode = new LinkedListNode(element, previous.getNext()); newNode.setPrevious(previous); previous.setNext(newNode); next.setPrevious(newNode); @@ -93,7 +93,7 @@ public void removeFromEnd() { if (this.totalElements == 1) { this.removeFromStart(); } else { - LinkedListNode previous = this.last.getPrevious(); + final LinkedListNode previous = this.last.getPrevious(); previous.setNext(null); this.last = previous; this.totalElements--; @@ -106,9 +106,9 @@ public void remove(final int position) { } else if (position == totalElements - 1) { this.removeFromEnd(); } else { - LinkedListNode previous = this.getNode(position - 1); - LinkedListNode current = previous.getNext(); - LinkedListNode next = current.getNext(); + final LinkedListNode previous = this.getNode(position - 1); + final LinkedListNode current = previous.getNext(); + final LinkedListNode next = current.getNext(); previous.setNext(next); next.setPrevious(previous); @@ -120,7 +120,7 @@ public int size() { return this.totalElements; } - public boolean contains(Element element) { + public boolean contains(final Element element) { LinkedListNode current = this.first; while (current != null) { if (current.getElement().equals(element)) { @@ -138,7 +138,7 @@ public String toString() { } LinkedListNode current = this.first; - StringBuilder sb = new StringBuilder("["); + final StringBuilder sb = new StringBuilder("["); for (int i = 0; i < this.totalElements; i++) { sb.append(current.getElement().getName()); sb.append(","); diff --git a/src/main/java/io/github/diegourban/algorithms/datastructure/linkedlist/LinkedListNode.java b/src/main/java/io/github/diegourban/algorithms/datastructure/linkedlist/LinkedListNode.java index 30e2623..32f9f0e 100644 --- a/src/main/java/io/github/diegourban/algorithms/datastructure/linkedlist/LinkedListNode.java +++ b/src/main/java/io/github/diegourban/algorithms/datastructure/linkedlist/LinkedListNode.java @@ -22,7 +22,7 @@ public Element getElement() { return element; } - public void setElement(Element element) { + public void setElement(final Element element) { this.element = element; } @@ -30,7 +30,7 @@ public LinkedListNode getNext() { return next; } - public void setNext(LinkedListNode next) { + public void setNext(final LinkedListNode next) { this.next = next; } @@ -38,7 +38,7 @@ public LinkedListNode getPrevious() { return previous; } - public void setPrevious(LinkedListNode previous) { + public void setPrevious(final LinkedListNode previous) { this.previous = previous; } } diff --git a/src/main/java/io/github/diegourban/algorithms/datastructure/queue/Queue.java b/src/main/java/io/github/diegourban/algorithms/datastructure/queue/Queue.java index 94adc62..dba0c9b 100644 --- a/src/main/java/io/github/diegourban/algorithms/datastructure/queue/Queue.java +++ b/src/main/java/io/github/diegourban/algorithms/datastructure/queue/Queue.java @@ -7,7 +7,7 @@ public class Queue { private final LinkedList elements = new LinkedList<>(); - public void add(Element element) { + public void add(final Element element) { this.elements.add(element); } diff --git a/src/main/java/io/github/diegourban/algorithms/datastructure/set/Set.java b/src/main/java/io/github/diegourban/algorithms/datastructure/set/Set.java index 1aeb6f2..1a8d3aa 100644 --- a/src/main/java/io/github/diegourban/algorithms/datastructure/set/Set.java +++ b/src/main/java/io/github/diegourban/algorithms/datastructure/set/Set.java @@ -5,7 +5,7 @@ public class Set { - private List> table = new LinkedList>(); + private final List> table = new LinkedList>(); public Set() { for (int i = 0; i < 26; i++) { @@ -13,28 +13,28 @@ public Set() { } } - public void add(String word) { + public void add(final String word) { if (!contains(word)) { - int index = calculateTableIndex(word); - List list = this.table.get(index); + final int index = calculateTableIndex(word); + final List list = this.table.get(index); list.add(word); } } - public void remove(String word) { + public void remove(final String word) { if (contains(word)) { - int index = calculateTableIndex(word); - List list = this.table.get(index); + final int index = calculateTableIndex(word); + final List list = this.table.get(index); list.remove(word); } } - private boolean contains(String word) { - int index = calculateTableIndex(word); + private boolean contains(final String word) { + final int index = calculateTableIndex(word); return this.table.get(index).contains(word); } - private int calculateTableIndex(String word) { + private int calculateTableIndex(final String word) { return word.toLowerCase().charAt(0) % 26; } diff --git a/src/main/java/io/github/diegourban/algorithms/datastructure/stack/Stack.java b/src/main/java/io/github/diegourban/algorithms/datastructure/stack/Stack.java index a55ee27..33deeea 100644 --- a/src/main/java/io/github/diegourban/algorithms/datastructure/stack/Stack.java +++ b/src/main/java/io/github/diegourban/algorithms/datastructure/stack/Stack.java @@ -8,7 +8,7 @@ public class Stack { private final List elements = new LinkedList<>(); - public void push(Element element) { + public void push(final Element element) { this.elements.add(element); } diff --git a/src/main/java/io/github/diegourban/algorithms/datastructure/vector/Vector.java b/src/main/java/io/github/diegourban/algorithms/datastructure/vector/Vector.java index 5d7c6c2..e8fbb23 100644 --- a/src/main/java/io/github/diegourban/algorithms/datastructure/vector/Vector.java +++ b/src/main/java/io/github/diegourban/algorithms/datastructure/vector/Vector.java @@ -67,7 +67,7 @@ public int size() { private void guaranteesSpace() { if (this.totalElements == this.elements.length) { - Element[] newElements = new Element[this.elements.length * 2]; + final Element[] newElements = new Element[this.elements.length * 2]; for (int i = 0; i < this.elements.length; i++) { newElements[i] = this.elements[i]; } diff --git a/src/main/java/io/github/diegourban/algorithms/io/Reader.java b/src/main/java/io/github/diegourban/algorithms/io/Reader.java index c9cc53d..c806c7d 100644 --- a/src/main/java/io/github/diegourban/algorithms/io/Reader.java +++ b/src/main/java/io/github/diegourban/algorithms/io/Reader.java @@ -16,14 +16,14 @@ public class Reader { private final byte[] buffer; private int bufferPointer, bytesRead; - public Reader(InputStream input) { + public Reader(final InputStream input) { din = new DataInputStream(input); buffer = new byte[BUFFER_SIZE]; bufferPointer = bytesRead = 0; } public String readLine() throws IOException { - byte[] buf = new byte[10000]; // line length + final byte[] buf = new byte[10000]; // line length int cnt = 0; int c = 0; @@ -47,7 +47,7 @@ public int nextInt() throws IOException { c = read(); } - boolean neg = (c == '-'); + final boolean neg = (c == '-'); if (neg) { c = read(); } @@ -81,7 +81,7 @@ public long nextLong() throws IOException { c = read(); } - boolean neg = (c == '-'); + final boolean neg = (c == '-'); if (neg) { c = read(); } @@ -106,7 +106,7 @@ public double nextDouble() throws IOException { c = read(); } - boolean neg = (c == '-'); + final boolean neg = (c == '-'); if (neg) { c = read(); } @@ -128,7 +128,7 @@ public double nextDouble() throws IOException { return ret; } - public void skip(int n) throws IOException { + public void skip(final int n) throws IOException { for (int i = 0; i < n; i++) { read(); } diff --git a/src/main/java/io/github/diegourban/algorithms/math/Combinatorics.java b/src/main/java/io/github/diegourban/algorithms/math/Combinatorics.java index b037df1..19abf97 100644 --- a/src/main/java/io/github/diegourban/algorithms/math/Combinatorics.java +++ b/src/main/java/io/github/diegourban/algorithms/math/Combinatorics.java @@ -2,7 +2,7 @@ import java.math.BigInteger; -public class Combinatorics { +public final class Combinatorics { private Combinatorics() {} @@ -22,7 +22,7 @@ private Combinatorics() {} * @param m the column number (0-indexed) * @return */ - public static BigInteger binomialCoefficient(int n, int m) { + public static BigInteger binomialCoefficient(final int n, final int m) { if (m < 0 || m > n) { return new BigInteger("0"); } @@ -35,7 +35,7 @@ public static BigInteger binomialCoefficient(int n, int m) { return new BigInteger(String.valueOf(n)); } - BigInteger[] binomials = new BigInteger[n + 1]; + final BigInteger[] binomials = new BigInteger[n + 1]; binomials[0] = new BigInteger("1"); for (int i = 1; i <= n; i++) { binomials[i] = new BigInteger("1"); diff --git a/src/main/java/io/github/diegourban/algorithms/math/Geometry.java b/src/main/java/io/github/diegourban/algorithms/math/Geometry.java index bbe26d8..7d6ac5d 100644 --- a/src/main/java/io/github/diegourban/algorithms/math/Geometry.java +++ b/src/main/java/io/github/diegourban/algorithms/math/Geometry.java @@ -2,7 +2,7 @@ import java.util.Arrays; -public class Geometry { +public final class Geometry { private Geometry() {} @@ -17,7 +17,7 @@ private Geometry() {} * @param y2 point 2 y coordinate * @return the distance between the two points */ - public static double distance(int x1, int y1, int x2, int y2) { + public static double distance(final int x1, final int y1, final int x2, final int y2) { // return Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)); return Math.hypot(x1 - x2, y1 - y2); } @@ -28,7 +28,7 @@ public static double distance(int x1, int y1, int x2, int y2) { * @param radius the radius of the circle * @return the area of the circle */ - public static double areaOfCircleFromRadius(double radius) { + public static double areaOfCircleFromRadius(final double radius) { return SIMPLE_PI * (radius * radius); } @@ -38,8 +38,8 @@ public static double areaOfCircleFromRadius(double radius) { * @param diameter the diameter of the circle * @return the area of the circle */ - public static double areaOfCircleFromDiameter(double diameter) { - double radius = radiusOfCircleFromDiameter(diameter); + public static double areaOfCircleFromDiameter(final double diameter) { + final double radius = radiusOfCircleFromDiameter(diameter); return areaOfCircleFromRadius(radius); } @@ -49,7 +49,7 @@ public static double areaOfCircleFromDiameter(double diameter) { * @param diameter the diameter of the circle * @return the radius of the circle */ - public static double radiusOfCircleFromDiameter(double diameter) { + public static double radiusOfCircleFromDiameter(final double diameter) { return diameter / 2.0; } @@ -59,7 +59,7 @@ public static double radiusOfCircleFromDiameter(double diameter) { * @param area the area of the circle * @return the radius of the circle */ - public static double radiusOfCircleFromArea(double area) { + public static double radiusOfCircleFromArea(final double area) { return Math.sqrt(area / SIMPLE_PI); } @@ -69,7 +69,7 @@ public static double radiusOfCircleFromArea(double area) { * @param sides the number of sides of the polygon * @return the amount of diagonals */ - public static long diagonalsOfPolygonWithSides(long sides) { + public static long diagonalsOfPolygonWithSides(final long sides) { return (sides * (sides - 3)) / 2; } @@ -80,7 +80,7 @@ public static long diagonalsOfPolygonWithSides(long sides) { * @param baseRadius the cylinder base radius * @return the height of the cylinder */ - public static double heightOfCylinder(double volume, double baseRadius) { + public static double heightOfCylinder(final double volume, final double baseRadius) { return volume / (SIMPLE_PI * baseRadius * baseRadius); } @@ -92,20 +92,20 @@ public static double heightOfCylinder(double volume, double baseRadius) { * @param c side c * @return true if the sides form a valid triangle, false otherwise */ - public static boolean isValidTriangle(double a, double b, double c) { + public static boolean isValidTriangle(final double a, final double b, final double c) { return (a + b > c) && (b + c > a) && (a + c > b); } - public static TriangleType checkTriangleType(double a, double b, double c) { - double[] array = new double[3]; + public static TriangleType checkTriangleType(final double a, final double b, final double c) { + final double[] array = new double[3]; array[0] = a; array[1] = b; array[2] = c; Arrays.sort(array); - double min = array[0]; - double med = array[1]; - double max = array[2]; + final double min = array[0]; + final double med = array[1]; + final double max = array[2]; if (max == med && med == min) { return TriangleType.EQUILATERAL; @@ -118,20 +118,20 @@ public static TriangleType checkTriangleType(double a, double b, double c) { return TriangleType.ESCALENE; } - public static boolean isRectangleTriangle(double a, double b, double c) { - double[] array = new double[3]; + public static boolean isRectangleTriangle(final double a, final double b, final double c) { + final double[] array = new double[3]; array[0] = a; array[1] = b; array[2] = c; Arrays.sort(array); - double min = array[0]; - double med = array[1]; - double max = array[2]; + final double min = array[0]; + final double med = array[1]; + final double max = array[2]; - double maxSquared = max * max; - double medSquared = med * med; - double minSquared = min * min; + final double maxSquared = max * max; + final double medSquared = med * med; + final double minSquared = min * min; return maxSquared == medSquared + minSquared; } diff --git a/src/main/java/io/github/diegourban/algorithms/math/Measurement.java b/src/main/java/io/github/diegourban/algorithms/math/Measurement.java index d1ded89..5a7be66 100644 --- a/src/main/java/io/github/diegourban/algorithms/math/Measurement.java +++ b/src/main/java/io/github/diegourban/algorithms/math/Measurement.java @@ -1,6 +1,6 @@ package io.github.diegourban.algorithms.math; -public class Measurement { +public final class Measurement { private Measurement() {} @@ -10,7 +10,7 @@ private Measurement() {} * @param miles the amount of miles to convert * @return the amount of miles converted to kilometers */ - public static double milesToKilometers(double miles) { + public static double milesToKilometers(final double miles) { return miles * 1.609344; } @@ -20,7 +20,7 @@ public static double milesToKilometers(double miles) { * @param kilometers the amount of kilometers to convert * @return the amount of kilometers converted to miles */ - public static double kilometersToMiles(double kilometers) { + public static double kilometersToMiles(final double kilometers) { return kilometers * 0.621371; } } diff --git a/src/main/java/io/github/diegourban/algorithms/math/NumberTheory.java b/src/main/java/io/github/diegourban/algorithms/math/NumberTheory.java index 2463374..fd1a5c1 100644 --- a/src/main/java/io/github/diegourban/algorithms/math/NumberTheory.java +++ b/src/main/java/io/github/diegourban/algorithms/math/NumberTheory.java @@ -5,7 +5,7 @@ /** * Number theory: greatest common divisor, least common multiple, primality and prime factorisation. */ -public class NumberTheory { +public final class NumberTheory { private NumberTheory() {} @@ -16,7 +16,7 @@ private NumberTheory() {} * @param b * @return The least common multiple of two numbers. */ - public static long lcm(long a, long b) { + public static long lcm(final long a, final long b) { return a * (b / gcdLoop(a, b)); } @@ -26,7 +26,7 @@ public static long lcm(long a, long b) { * @param input array of numbers * @return The least common multiple of an array of numbers. */ - public static long lcm(long[] input) { + public static long lcm(final long[] input) { long result = input[0]; for (int i = 1; i < input.length; i++) result = lcm(result, input[i]); return result; @@ -46,7 +46,7 @@ public static long gcdLoop(final long a, final long b) { long gcd = a; long bNumber = b; while (bNumber > 0) { - long temp = bNumber; + final long temp = bNumber; bNumber = gcd % bNumber; // % is remainder gcd = temp; } @@ -63,7 +63,7 @@ public static long gcdLoop(final long a, final long b) { * @param b * @return The greatest common divisor of two numbers. */ - public static long gcdRecursive(long a, long b) { + public static long gcdRecursive(final long a, final long b) { return b == 0 ? a : gcdRecursive(b, a % b); } @@ -75,7 +75,7 @@ public static long gcdRecursive(long a, long b) { * @param n * @return true if the number n is prime, false otherwise */ - public static boolean isPrime(int n) { + public static boolean isPrime(final int n) { if (n <= 1) { return false; } else if (n <= 3) { @@ -101,8 +101,8 @@ public static boolean isPrime(int n) { * @param number * @return The list of prime factors of a number. */ - public static List primeFactorsList(int number) { - List factors = new ArrayList<>(); + public static List primeFactorsList(final int number) { + final List factors = new ArrayList<>(); fillPrimeFactors(number, factors); return factors; } @@ -113,8 +113,8 @@ public static List primeFactorsList(int number) { * @param number * @return The set of prime factors of a number. */ - public static Set primeFactorsSet(int number) { - Set factors = new HashSet<>(); + public static Set primeFactorsSet(final int number) { + final Set factors = new HashSet<>(); fillPrimeFactors(number, factors); return factors; } @@ -125,7 +125,7 @@ public static Set primeFactorsSet(int number) { * @param number the number to extract the prime factors * @param factors the collection to fill with the prime factors */ - private static void fillPrimeFactors(int number, Collection factors) { + private static void fillPrimeFactors(final int number, final Collection factors) { int n = number; for (int i = 2; i <= n / i; i++) { while (n % i == 0) { diff --git a/src/main/java/io/github/diegourban/algorithms/math/Numbers.java b/src/main/java/io/github/diegourban/algorithms/math/Numbers.java index e1f15a8..08323d5 100644 --- a/src/main/java/io/github/diegourban/algorithms/math/Numbers.java +++ b/src/main/java/io/github/diegourban/algorithms/math/Numbers.java @@ -1,6 +1,6 @@ package io.github.diegourban.algorithms.math; -public class Numbers { +public final class Numbers { private Numbers() {} @@ -11,7 +11,7 @@ private Numbers() {} * @param digit the digit expected to find in the number * @return true if the number contains the digit, false otherwise */ - public static boolean containsDigit(long number, long digit) { + public static boolean containsDigit(final long number, final long digit) { long thisNumber = number >= 0 ? number : -number; long thisDigit; @@ -41,7 +41,7 @@ public static boolean containsRepeatingDigits(final long number, final int times int reps = 0; while (theNumber > 0) { - Long n = theNumber % 10; + final Long n = theNumber % 10; theNumber /= 10; if (n.equals(old)) { if (++reps == times) { @@ -65,8 +65,8 @@ public static boolean containsRepeatingDigits(final long number, final int times public static int[] toArray(final long number) { long theNumber = number; - int length = Long.toString(theNumber).length(); - int[] array = new int[length]; + final int length = Long.toString(theNumber).length(); + final int[] array = new int[length]; for (int index = 0; index < length; index++) { array[index] = (int) theNumber % 10; @@ -82,7 +82,7 @@ public static int[] toArray(final long number) { * @param number some number * @return the length of the number */ - public static int length(int number) { + public static int length(final int number) { if (number < 100000) { // 5 or less if (number < 100) { diff --git a/src/main/java/io/github/diegourban/algorithms/math/Sequences.java b/src/main/java/io/github/diegourban/algorithms/math/Sequences.java index da67b4e..087dcf8 100644 --- a/src/main/java/io/github/diegourban/algorithms/math/Sequences.java +++ b/src/main/java/io/github/diegourban/algorithms/math/Sequences.java @@ -7,7 +7,7 @@ /** * Number sequences. */ -public class Sequences { +public final class Sequences { private Sequences() {} @@ -22,7 +22,7 @@ private Sequences() {} * @param n the nth number in the Fibonacci sequence to calculate * @return the nth Fibonacci number */ - public static int fibonacci(int n) { + public static int fibonacci(final int n) { // edge cases: if (n < 0) { throw new IllegalArgumentException("Index was negative. No such thing as a negative index in a series."); @@ -57,7 +57,7 @@ public static int fibonacci(int n) { * @param n the nth number in the Fibonacci sequence to calculate * @return the nth Fibonacci number */ - public static double fibonacciSimpleBinetFormula(int n) { + public static double fibonacciSimpleBinetFormula(final int n) { if (n == 0) { return 0; } @@ -73,7 +73,7 @@ public static double fibonacciSimpleBinetFormula(int n) { * @param n the nth number in the Fibonacci sequence to calculate * @return the nth Fibonacci number */ - public static BigInteger fibonacciBinetFormula(int n) { + public static BigInteger fibonacciBinetFormula(final int n) { if (n == 0) { return new BigInteger("0"); } @@ -85,10 +85,10 @@ public static BigInteger fibonacciBinetFormula(int n) { } final double phi = (1 + Math.sqrt(5)) / 2; - BigDecimal sqrt5 = BigDecimal.valueOf(Math.sqrt(5)); + final BigDecimal sqrt5 = BigDecimal.valueOf(Math.sqrt(5)); - BigDecimal pow = BigDecimal.valueOf(Math.pow(phi, n)); - BigDecimal powInvrt = BigDecimal.valueOf(Math.pow(-phi, -n)); + final BigDecimal pow = BigDecimal.valueOf(Math.pow(phi, n)); + final BigDecimal powInvrt = BigDecimal.valueOf(Math.pow(-phi, -n)); return pow.subtract(powInvrt).divide(sqrt5, RoundingMode.HALF_UP).toBigInteger(); } } diff --git a/src/main/java/io/github/diegourban/algorithms/math/Statistics.java b/src/main/java/io/github/diegourban/algorithms/math/Statistics.java index 69a6019..5098b6c 100644 --- a/src/main/java/io/github/diegourban/algorithms/math/Statistics.java +++ b/src/main/java/io/github/diegourban/algorithms/math/Statistics.java @@ -2,7 +2,7 @@ import java.util.Arrays; -public class Statistics { +public final class Statistics { private Statistics() {} @@ -13,13 +13,13 @@ private Statistics() {} * @param data * @return */ - public static double mean(double[] data) { + public static double mean(final double[] data) { if (data.length == 0) { return 0.0; } double sum = 0.0; - for (double value : data) { + for (final double value : data) { sum += value; } @@ -32,7 +32,7 @@ public static double mean(double[] data) { * @param data * @return */ - public static double median(double[] data) { + public static double median(final double[] data) { Arrays.sort(data); final int middle = data.length / 2; @@ -50,7 +50,7 @@ public static double median(double[] data) { * @param data * @return */ - public static double mode(double[] data) { + public static double mode(final double[] data) { double maxValue = 0; int maxCount = 0; @@ -75,11 +75,11 @@ public static double mode(double[] data) { * @param data * @return the Average Absolute Deviation from data */ - public static double meanAbsoluteDeviation(double[] data) { - double mean = mean(data); + public static double meanAbsoluteDeviation(final double[] data) { + final double mean = mean(data); double sum = 0; - for (double value : data) { + for (final double value : data) { sum += Math.abs(value - mean); } diff --git a/src/main/java/io/github/diegourban/algorithms/math/TriangleType.java b/src/main/java/io/github/diegourban/algorithms/math/TriangleType.java index 3094bdb..41c7d91 100644 --- a/src/main/java/io/github/diegourban/algorithms/math/TriangleType.java +++ b/src/main/java/io/github/diegourban/algorithms/math/TriangleType.java @@ -5,9 +5,9 @@ public enum TriangleType { ESCALENE("Escaleno"), ISOSCELES("Isoceles"); - private String name; + private final String name; - private TriangleType(String name) { + private TriangleType(final String name) { this.name = name; } diff --git a/src/main/java/io/github/diegourban/algorithms/search/BinarySearch.java b/src/main/java/io/github/diegourban/algorithms/search/BinarySearch.java index 6e608a0..7f4abe2 100644 --- a/src/main/java/io/github/diegourban/algorithms/search/BinarySearch.java +++ b/src/main/java/io/github/diegourban/algorithms/search/BinarySearch.java @@ -3,7 +3,7 @@ /** * Binary Search algorithm */ -public class BinarySearch { +public final class BinarySearch { private BinarySearch() {} diff --git a/src/main/java/io/github/diegourban/algorithms/sorting/InsertionSort.java b/src/main/java/io/github/diegourban/algorithms/sorting/InsertionSort.java index 8260efd..3fa938c 100644 --- a/src/main/java/io/github/diegourban/algorithms/sorting/InsertionSort.java +++ b/src/main/java/io/github/diegourban/algorithms/sorting/InsertionSort.java @@ -21,8 +21,8 @@ private void sort(final int[] items, final int totalElements) { int analysis = current; while (analysis > 0 && items[analysis] < items[analysis - 1]) { - Integer analysisItem = items[analysis]; - Integer previousItem = items[analysis - 1]; + final Integer analysisItem = items[analysis]; + final Integer previousItem = items[analysis - 1]; items[analysis] = previousItem; items[analysis - 1] = analysisItem; analysis--; diff --git a/src/main/java/io/github/diegourban/algorithms/sorting/SelectionSort.java b/src/main/java/io/github/diegourban/algorithms/sorting/SelectionSort.java index 03d924b..2cdde3a 100644 --- a/src/main/java/io/github/diegourban/algorithms/sorting/SelectionSort.java +++ b/src/main/java/io/github/diegourban/algorithms/sorting/SelectionSort.java @@ -19,8 +19,8 @@ public void sort(final int[] items) { private void sort(final int[] items, final int totalElements) { for (int current = 0; current < totalElements - 1; current++) { final int smallerIndex = findSmallerIndex(items, current, totalElements); - Integer currentItem = items[current]; - Integer smallerItem = items[smallerIndex]; + final Integer currentItem = items[current]; + final Integer smallerItem = items[smallerIndex]; items[current] = smallerItem; items[smallerIndex] = currentItem; } diff --git a/src/main/java/io/github/diegourban/algorithms/string/StringUtils.java b/src/main/java/io/github/diegourban/algorithms/string/StringUtils.java index b563570..b7c92ea 100644 --- a/src/main/java/io/github/diegourban/algorithms/string/StringUtils.java +++ b/src/main/java/io/github/diegourban/algorithms/string/StringUtils.java @@ -2,11 +2,11 @@ import java.util.*; -public class StringUtils { +public final class StringUtils { private StringUtils() {} - public static boolean isPalindrome(String theString) { + public static boolean isPalindrome(final String theString) { if (theString == null || theString.isEmpty()) { return false; } @@ -16,8 +16,8 @@ public static boolean isPalindrome(String theString) { } for (int i = 0; i < theString.length() / 2; i++) { - char c1 = theString.charAt(i); - char c2 = theString.charAt(theString.length() - i - 1); + final char c1 = theString.charAt(i); + final char c2 = theString.charAt(theString.length() - i - 1); if (c1 != c2) { return false; } @@ -25,18 +25,18 @@ public static boolean isPalindrome(String theString) { return true; } - public static boolean isAnagram(String a, String b) { + public static boolean isAnagram(final String a, final String b) { if (a.length() != b.length()) { return false; } - char[] arrA = sort(a); - char[] arrB = sort(b); + final char[] arrA = sort(a); + final char[] arrB = sort(b); return Arrays.equals(arrA, arrB); } - private static char[] sort(String original) { - char[] chars = original.toLowerCase().toCharArray(); + private static char[] sort(final String original) { + final char[] chars = original.toLowerCase().toCharArray(); Arrays.sort(chars); // Dual-Pivot Quicksort, O(n log(n)) return chars; } diff --git a/src/test/java/io/github/diegourban/algorithms/datastructure/array/ArrayUtilsTest.java b/src/test/java/io/github/diegourban/algorithms/datastructure/array/ArrayUtilsTest.java index 91a3e0a..45d4b1f 100644 --- a/src/test/java/io/github/diegourban/algorithms/datastructure/array/ArrayUtilsTest.java +++ b/src/test/java/io/github/diegourban/algorithms/datastructure/array/ArrayUtilsTest.java @@ -9,21 +9,21 @@ class ArrayUtilsTest { @Test void shouldNotShuffleSmallArray() { - int[] array = new int[] {1}; + final int[] array = new int[] {1}; ArrayUtils.shuffle(array); assertThat(array).hasSize(1); - Integer[] what = Arrays.stream(array).boxed().toArray(Integer[]::new); + final Integer[] what = Arrays.stream(array).boxed().toArray(Integer[]::new); assertThat(what).containsExactlyInAnyOrder(1); } @Test void shouldShuffle() { - int[] array = new int[] {1, 2, 3, 4, 5}; + final int[] array = new int[] {1, 2, 3, 4, 5}; ArrayUtils.shuffle(array); assertThat(array).hasSize(5); - Integer[] what = Arrays.stream(array).boxed().toArray(Integer[]::new); + final Integer[] what = Arrays.stream(array).boxed().toArray(Integer[]::new); assertThat(what).containsExactlyInAnyOrder(1, 2, 3, 4, 5); } } diff --git a/src/test/java/io/github/diegourban/algorithms/datastructure/linkedlist/LinkedListTest.java b/src/test/java/io/github/diegourban/algorithms/datastructure/linkedlist/LinkedListTest.java index 28ed1ae..e2a6192 100644 --- a/src/test/java/io/github/diegourban/algorithms/datastructure/linkedlist/LinkedListTest.java +++ b/src/test/java/io/github/diegourban/algorithms/datastructure/linkedlist/LinkedListTest.java @@ -11,7 +11,7 @@ class LinkedListTest { @Test void shouldAddAtStart() { - LinkedList linkedList = new LinkedList(); + final LinkedList linkedList = new LinkedList(); linkedList.addAtStart(new Element("diego")); linkedList.addAtStart(new Element("paulo")); linkedList.addAtStart(new Element("josé")); @@ -23,7 +23,7 @@ void shouldAddAtStart() { @Test void shouldAddAtEnd() { - LinkedList linkedList = new LinkedList(); + final LinkedList linkedList = new LinkedList(); linkedList.addAtEnd(new Element("diego")); linkedList.addAtEnd(new Element("paulo")); linkedList.addAtEnd(new Element("josé")); @@ -35,7 +35,7 @@ void shouldAddAtEnd() { @Test void shouldAddAtTheMiddle() { - LinkedList linkedList = new LinkedList(); + final LinkedList linkedList = new LinkedList(); linkedList.addAtEnd(new Element("diego")); linkedList.addAtEnd(new Element("paulo")); linkedList.add(1, new Element("josé")); @@ -47,7 +47,7 @@ void shouldAddAtTheMiddle() { @Test void shouldShowSize() { - LinkedList linkedList = new LinkedList(); + final LinkedList linkedList = new LinkedList(); linkedList.addAtEnd(new Element("diego")); linkedList.addAtEnd(new Element("paulo")); linkedList.add(1, new Element("josé")); @@ -57,7 +57,7 @@ void shouldShowSize() { @Test void shouldRemoveFromStart() { - LinkedList linkedList = new LinkedList(); + final LinkedList linkedList = new LinkedList(); linkedList.addAtEnd(new Element("diego")); linkedList.addAtEnd(new Element("paulo")); linkedList.addAtEnd(new Element("josé")); @@ -70,7 +70,7 @@ void shouldRemoveFromStart() { @Test void shouldRemoveFromEnd() { - LinkedList linkedList = new LinkedList(); + final LinkedList linkedList = new LinkedList(); linkedList.addAtEnd(new Element("diego")); linkedList.addAtEnd(new Element("paulo")); linkedList.addAtEnd(new Element("josé")); @@ -83,7 +83,7 @@ void shouldRemoveFromEnd() { @Test void shouldRemoveFromMiddle() { - LinkedList linkedList = new LinkedList(); + final LinkedList linkedList = new LinkedList(); linkedList.addAtEnd(new Element("diego")); linkedList.addAtEnd(new Element("paulo")); linkedList.addAtEnd(new Element("josé")); @@ -96,7 +96,7 @@ void shouldRemoveFromMiddle() { @Test void shouldContainElement() { - LinkedList linkedList = new LinkedList(); + final LinkedList linkedList = new LinkedList(); linkedList.addAtEnd(new Element("diego")); linkedList.addAtEnd(new Element("paulo")); linkedList.addAtEnd(new Element("josé")); @@ -106,7 +106,7 @@ void shouldContainElement() { @Test void shouldNotContainElement() { - LinkedList linkedList = new LinkedList(); + final LinkedList linkedList = new LinkedList(); linkedList.addAtEnd(new Element("diego")); linkedList.addAtEnd(new Element("paulo")); linkedList.addAtEnd(new Element("josé")); @@ -116,7 +116,7 @@ void shouldNotContainElement() { @Test void shouldPrint() { - LinkedList linkedList = new LinkedList(); + final LinkedList linkedList = new LinkedList(); linkedList.addAtEnd(new Element("diego")); linkedList.addAtEnd(new Element("paulo")); linkedList.addAtEnd(new Element("josé")); @@ -126,7 +126,7 @@ void shouldPrint() { @Test void shouldAddAtPositionOfEmptyList() { - LinkedList linkedList = new LinkedList(); + final LinkedList linkedList = new LinkedList(); linkedList.add(0, new Element("diego")); assertThat(linkedList.size()).isEqualTo(1); @@ -135,7 +135,7 @@ void shouldAddAtPositionOfEmptyList() { @Test void shouldAddAtPositionEqualToSizeAsLast() { - LinkedList linkedList = new LinkedList(); + final LinkedList linkedList = new LinkedList(); linkedList.addAtEnd(new Element("diego")); linkedList.add(1, new Element("paulo")); @@ -144,7 +144,7 @@ void shouldAddAtPositionEqualToSizeAsLast() { @Test void shouldRejectGettingAMissingPosition() { - LinkedList linkedList = new LinkedList(); + final LinkedList linkedList = new LinkedList(); linkedList.addAtEnd(new Element("diego")); assertThatIllegalArgumentException().isThrownBy(() -> linkedList.get(1)); @@ -158,7 +158,7 @@ void shouldRejectRemovingFromStartOfEmptyList() { @Test void shouldBecomeEmptyAfterRemovingTheOnlyElementFromStart() { - LinkedList linkedList = new LinkedList(); + final LinkedList linkedList = new LinkedList(); linkedList.addAtEnd(new Element("diego")); linkedList.removeFromStart(); @@ -168,7 +168,7 @@ void shouldBecomeEmptyAfterRemovingTheOnlyElementFromStart() { @Test void shouldBecomeEmptyAfterRemovingTheOnlyElementFromEnd() { - LinkedList linkedList = new LinkedList(); + final LinkedList linkedList = new LinkedList(); linkedList.addAtEnd(new Element("diego")); linkedList.removeFromEnd(); @@ -178,7 +178,7 @@ void shouldBecomeEmptyAfterRemovingTheOnlyElementFromEnd() { @Test void shouldRemoveFirstAndLastByPosition() { - LinkedList linkedList = new LinkedList(); + final LinkedList linkedList = new LinkedList(); linkedList.addAtEnd(new Element("diego")); linkedList.addAtEnd(new Element("paulo")); linkedList.addAtEnd(new Element("josé")); diff --git a/src/test/java/io/github/diegourban/algorithms/datastructure/queue/QueueTest.java b/src/test/java/io/github/diegourban/algorithms/datastructure/queue/QueueTest.java index 3901b3b..7c38d37 100644 --- a/src/test/java/io/github/diegourban/algorithms/datastructure/queue/QueueTest.java +++ b/src/test/java/io/github/diegourban/algorithms/datastructure/queue/QueueTest.java @@ -23,7 +23,7 @@ void shouldPoll() { queue.add(new Element("diego")); queue.add(new Element("leonardo")); queue.add(new Element("urban")); - Element removed = queue.poll(); + final Element removed = queue.poll(); assertThat(removed.getName()).isEqualTo("diego"); assertThat(queue).hasToString("[leonardo, urban]"); diff --git a/src/test/java/io/github/diegourban/algorithms/datastructure/set/SetTest.java b/src/test/java/io/github/diegourban/algorithms/datastructure/set/SetTest.java index f532aae..001dc4d 100644 --- a/src/test/java/io/github/diegourban/algorithms/datastructure/set/SetTest.java +++ b/src/test/java/io/github/diegourban/algorithms/datastructure/set/SetTest.java @@ -8,7 +8,7 @@ class SetTest { @Test void shouldAdd() { - Set set = new Set(); + final Set set = new Set(); set.add("Diego"); set.add("André"); set.add("Zuleika"); @@ -19,7 +19,7 @@ void shouldAdd() { @Test void shouldRemove() { - Set set = new Set(); + final Set set = new Set(); set.add("Diego"); set.add("André"); set.add("Zuleika"); @@ -34,7 +34,7 @@ void shouldRemove() { @Test void shouldIgnoreDuplicates() { - Set set = new Set(); + final Set set = new Set(); set.add("Diego"); set.add("Diego"); @@ -45,7 +45,7 @@ void shouldIgnoreDuplicates() { @Test void shouldIgnoreRemovingAMissingWord() { - Set set = new Set(); + final Set set = new Set(); set.add("Diego"); set.remove("Daniel"); diff --git a/src/test/java/io/github/diegourban/algorithms/datastructure/stack/StackTest.java b/src/test/java/io/github/diegourban/algorithms/datastructure/stack/StackTest.java index 50f739f..ef34605 100644 --- a/src/test/java/io/github/diegourban/algorithms/datastructure/stack/StackTest.java +++ b/src/test/java/io/github/diegourban/algorithms/datastructure/stack/StackTest.java @@ -9,7 +9,7 @@ class StackTest { @Test void shouldPush() { - Stack stack = new Stack(); + final Stack stack = new Stack(); stack.push(new Element("diego")); stack.push(new Element("leonardo")); stack.push(new Element("urban")); @@ -19,11 +19,11 @@ void shouldPush() { @Test void shouldRemove() { - Stack stack = new Stack(); + final Stack stack = new Stack(); stack.push(new Element("diego")); stack.push(new Element("leonardo")); stack.push(new Element("urban")); - Element pop = stack.pop(); + final Element pop = stack.pop(); assertThat(pop.getName()).isEqualTo("urban"); assertThat(stack).hasToString("[diego, leonardo]"); @@ -31,7 +31,7 @@ void shouldRemove() { @Test void shouldHandleIsEmpty() { - Stack stack = new Stack(); + final Stack stack = new Stack(); assertThat(stack.empty()).isTrue(); stack.push(new Element("diego")); stack.push(new Element("leonardo")); diff --git a/src/test/java/io/github/diegourban/algorithms/datastructure/vector/VectorTest.java b/src/test/java/io/github/diegourban/algorithms/datastructure/vector/VectorTest.java index 6332813..e5a21e4 100644 --- a/src/test/java/io/github/diegourban/algorithms/datastructure/vector/VectorTest.java +++ b/src/test/java/io/github/diegourban/algorithms/datastructure/vector/VectorTest.java @@ -10,17 +10,17 @@ class VectorTest { @Test void test() { - Element e1 = new Element("Joao"); - Element e2 = new Element("Jose"); + final Element e1 = new Element("Joao"); + final Element e2 = new Element("Jose"); - Vector vector = new Vector(); + final Vector vector = new Vector(); vector.add(e1); vector.add(e2); assertThat(vector.size()).isEqualTo(2); assertThat(vector.contains(e1)).isEqualTo(true); - Element e3 = new Element("Mario"); + final Element e3 = new Element("Mario"); vector.add(1, e3); assertThat(vector.contains(e3)).isEqualTo(true); assertThat(vector.size()).isEqualTo(3); @@ -28,7 +28,7 @@ void test() { vector.remove(1); for (int i = 0; i < 300; i++) { - Element e = new Element("Element " + i); + final Element e = new Element("Element " + i); vector.add(e); } System.out.println(vector); @@ -36,7 +36,7 @@ void test() { @Test void shouldRejectAddingAtAnInvalidPosition() { - Vector vector = new Vector(); + final Vector vector = new Vector(); vector.add(new Element("Joao")); assertThatIllegalArgumentException().isThrownBy(() -> vector.add(-1, new Element("Jose"))); @@ -45,7 +45,7 @@ void shouldRejectAddingAtAnInvalidPosition() { @Test void shouldRejectGettingAnInvalidPosition() { - Vector vector = new Vector(); + final Vector vector = new Vector(); vector.add(new Element("Joao")); assertThat(vector.get(0)).isEqualTo(new Element("Joao")); @@ -55,7 +55,7 @@ void shouldRejectGettingAnInvalidPosition() { @Test void shouldNotContainAMissingElement() { - Vector vector = new Vector(); + final Vector vector = new Vector(); vector.add(new Element("Joao")); assertThat(vector.contains(new Element("Mario"))).isFalse(); @@ -63,7 +63,7 @@ void shouldNotContainAMissingElement() { @Test void shouldRemoveFromAFullVector() { - Vector vector = new Vector(); + final Vector vector = new Vector(); for (int i = 0; i < 100; i++) { vector.add(new Element("Element " + i)); } diff --git a/src/test/java/io/github/diegourban/algorithms/io/ReaderTest.java b/src/test/java/io/github/diegourban/algorithms/io/ReaderTest.java index 5ae48b4..380ff49 100644 --- a/src/test/java/io/github/diegourban/algorithms/io/ReaderTest.java +++ b/src/test/java/io/github/diegourban/algorithms/io/ReaderTest.java @@ -18,10 +18,10 @@ void shouldCreateInstance() { @Test void shouldHandleEmptyInput() throws Exception { - InputStream input = new SampleBuilder().buildAsInputStream(); + final InputStream input = new SampleBuilder().buildAsInputStream(); - Reader reader = new Reader(input); - String empty = reader.readLine(); + final Reader reader = new Reader(input); + final String empty = reader.readLine(); reader.close(); assertThat(empty).isEmpty(); @@ -29,8 +29,8 @@ void shouldHandleEmptyInput() throws Exception { @Test void shouldHandleEOF() throws Exception { - InputStream input = new SampleBuilder().append(1).buildAsInputStream(); - Reader reader = new Reader(input); + final InputStream input = new SampleBuilder().append(1).buildAsInputStream(); + final Reader reader = new Reader(input); reader.nextInt(); assertThatExceptionOfType(EOFException.class).isThrownBy(reader::nextInt); @@ -38,18 +38,18 @@ void shouldHandleEOF() throws Exception { @Test void shouldReadUntilEOF() throws Exception { - String[] inputs = {"first line", "second line", "last line"}; - InputStream input = new SampleBuilder() + final String[] inputs = {"first line", "second line", "last line"}; + final InputStream input = new SampleBuilder() .appendln(inputs[0]) .appendln(inputs[1]) .append(inputs[2]) .buildAsInputStream(); - Reader reader = new Reader(input); + final Reader reader = new Reader(input); int i = 0; while (true) { try { - String line = reader.readLine(); + final String line = reader.readLine(); assertThat(line).isEqualTo(inputs[i]); i++; } catch (EOFException ex) { @@ -61,9 +61,9 @@ void shouldReadUntilEOF() throws Exception { @Test void shouldHandleCloseAlreadyClosedReader() throws Exception { - InputStream input = new SampleBuilder().buildAsInputStream(); + final InputStream input = new SampleBuilder().buildAsInputStream(); - Reader reader = new Reader(input); + final Reader reader = new Reader(input); assertThat(reader.isClosed()).isFalse(); reader.close(); assertThat(reader.isClosed()).isTrue(); @@ -73,10 +73,10 @@ void shouldHandleCloseAlreadyClosedReader() throws Exception { @Test void shouldReadOneLine() throws Exception { - InputStream input = new SampleBuilder().appendln("this is a line").buildAsInputStream(); + final InputStream input = new SampleBuilder().appendln("this is a line").buildAsInputStream(); - Reader reader = new Reader(input); - String line = reader.readLine(); + final Reader reader = new Reader(input); + final String line = reader.readLine(); reader.close(); assertThat(line).isEqualTo("this is a line"); @@ -84,14 +84,14 @@ void shouldReadOneLine() throws Exception { @Test void shouldReadTwoLines() throws Exception { - InputStream input = new SampleBuilder() + final InputStream input = new SampleBuilder() .appendln("this is a line") .appendln("this is another line") .buildAsInputStream(); - Reader reader = new Reader(input); - String firstLine = reader.readLine(); - String secondLine = reader.readLine(); + final Reader reader = new Reader(input); + final String firstLine = reader.readLine(); + final String secondLine = reader.readLine(); reader.close(); assertThat(firstLine).isEqualTo("this is a line"); @@ -100,11 +100,11 @@ void shouldReadTwoLines() throws Exception { @Test void shouldJumpEmptyLines() throws Exception { - InputStream input = + final InputStream input = new SampleBuilder().appendln("").appendln("this is a line").buildAsInputStream(); - Reader reader = new Reader(input); - String line = reader.readLine(); + final Reader reader = new Reader(input); + final String line = reader.readLine(); reader.close(); assertThat(line).isEqualTo("this is a line"); @@ -112,10 +112,10 @@ void shouldJumpEmptyLines() throws Exception { @Test void shouldReadPositiveIntegerUnit() throws Exception { - InputStream input = new SampleBuilder().appendln("5").buildAsInputStream(); + final InputStream input = new SampleBuilder().appendln("5").buildAsInputStream(); - Reader reader = new Reader(input); - int nextInt = reader.nextInt(); + final Reader reader = new Reader(input); + final int nextInt = reader.nextInt(); reader.close(); assertThat(nextInt).isEqualTo(5); @@ -123,10 +123,10 @@ void shouldReadPositiveIntegerUnit() throws Exception { @Test void shouldReadIntegerAfterSpace() throws Exception { - InputStream input = new SampleBuilder().appendln(" 2").buildAsInputStream(); + final InputStream input = new SampleBuilder().appendln(" 2").buildAsInputStream(); - Reader reader = new Reader(input); - int nextInt = reader.nextInt(); + final Reader reader = new Reader(input); + final int nextInt = reader.nextInt(); reader.close(); assertThat(nextInt).isEqualTo(2); @@ -134,10 +134,10 @@ void shouldReadIntegerAfterSpace() throws Exception { @Test void shouldReadNegativeIntegerUnit() throws Exception { - InputStream input = new SampleBuilder().appendln("-4").buildAsInputStream(); + final InputStream input = new SampleBuilder().appendln("-4").buildAsInputStream(); - Reader reader = new Reader(input); - int nextInt = reader.nextInt(); + final Reader reader = new Reader(input); + final int nextInt = reader.nextInt(); reader.close(); assertThat(nextInt).isEqualTo(-4); @@ -145,10 +145,10 @@ void shouldReadNegativeIntegerUnit() throws Exception { @Test void shouldReadPositiveIntegerDozen() throws Exception { - InputStream input = new SampleBuilder().appendln("16").buildAsInputStream(); + final InputStream input = new SampleBuilder().appendln("16").buildAsInputStream(); - Reader reader = new Reader(input); - int nextInt = reader.nextInt(); + final Reader reader = new Reader(input); + final int nextInt = reader.nextInt(); reader.close(); assertThat(nextInt).isEqualTo(16); @@ -156,10 +156,10 @@ void shouldReadPositiveIntegerDozen() throws Exception { @Test void shouldReadNegativeIntegerDozen() throws Exception { - InputStream input = new SampleBuilder().appendln("-20").buildAsInputStream(); + final InputStream input = new SampleBuilder().appendln("-20").buildAsInputStream(); - Reader reader = new Reader(input); - int nextInt = reader.nextInt(); + final Reader reader = new Reader(input); + final int nextInt = reader.nextInt(); reader.close(); assertThat(nextInt).isEqualTo(-20); @@ -167,10 +167,10 @@ void shouldReadNegativeIntegerDozen() throws Exception { @Test void shouldReadPositiveIntegerHundred() throws Exception { - InputStream input = new SampleBuilder().appendln("123").buildAsInputStream(); + final InputStream input = new SampleBuilder().appendln("123").buildAsInputStream(); - Reader reader = new Reader(input); - int nextInt = reader.nextInt(); + final Reader reader = new Reader(input); + final int nextInt = reader.nextInt(); reader.close(); assertThat(nextInt).isEqualTo(123); @@ -178,10 +178,10 @@ void shouldReadPositiveIntegerHundred() throws Exception { @Test void shouldReadNegativeIntegerHundred() throws Exception { - InputStream input = new SampleBuilder().appendln("-321").buildAsInputStream(); + final InputStream input = new SampleBuilder().appendln("-321").buildAsInputStream(); - Reader reader = new Reader(input); - int nextInt = reader.nextInt(); + final Reader reader = new Reader(input); + final int nextInt = reader.nextInt(); reader.close(); assertThat(nextInt).isEqualTo(-321); @@ -189,15 +189,16 @@ void shouldReadNegativeIntegerHundred() throws Exception { @Test void shouldReadChainOfPositiveAndNegativeIntegers() throws Exception { - InputStream input = new SampleBuilder().appendln("-123 987 -88 74 -9 7").buildAsInputStream(); + final InputStream input = + new SampleBuilder().appendln("-123 987 -88 74 -9 7").buildAsInputStream(); - Reader reader = new Reader(input); - int first = reader.nextInt(); - int second = reader.nextInt(); - int third = reader.nextInt(); - int fourth = reader.nextInt(); - int fifth = reader.nextInt(); - int sixth = reader.nextInt(); + final Reader reader = new Reader(input); + final int first = reader.nextInt(); + final int second = reader.nextInt(); + final int third = reader.nextInt(); + final int fourth = reader.nextInt(); + final int fifth = reader.nextInt(); + final int sixth = reader.nextInt(); reader.close(); assertThat(first).isEqualTo(-123); @@ -210,10 +211,10 @@ void shouldReadChainOfPositiveAndNegativeIntegers() throws Exception { @Test void shouldReadPositiveDoubleUnit() throws Exception { - InputStream input = new SampleBuilder().appendln("1.1").buildAsInputStream(); + final InputStream input = new SampleBuilder().appendln("1.1").buildAsInputStream(); - Reader reader = new Reader(input); - double nextDouble = reader.nextDouble(); + final Reader reader = new Reader(input); + final double nextDouble = reader.nextDouble(); reader.close(); assertThat(nextDouble).isCloseTo(1.1, within(0.1)); @@ -221,10 +222,10 @@ void shouldReadPositiveDoubleUnit() throws Exception { @Test void shouldReadDoubleAfterSpace() throws Exception { - InputStream input = new SampleBuilder().appendln(" 5.6").buildAsInputStream(); + final InputStream input = new SampleBuilder().appendln(" 5.6").buildAsInputStream(); - Reader reader = new Reader(input); - double d = reader.nextDouble(); + final Reader reader = new Reader(input); + final double d = reader.nextDouble(); reader.close(); assertThat(d).isCloseTo(5.6, within(0.1)); @@ -232,10 +233,10 @@ void shouldReadDoubleAfterSpace() throws Exception { @Test void shouldReadNegativeDoubleUnit() throws Exception { - InputStream input = new SampleBuilder().appendln("-2.3").buildAsInputStream(); + final InputStream input = new SampleBuilder().appendln("-2.3").buildAsInputStream(); - Reader reader = new Reader(input); - double nextDouble = reader.nextDouble(); + final Reader reader = new Reader(input); + final double nextDouble = reader.nextDouble(); reader.close(); assertThat(nextDouble).isCloseTo(-2.3, within(0.1)); @@ -243,10 +244,10 @@ void shouldReadNegativeDoubleUnit() throws Exception { @Test void shouldReadPositiveDoubleDozen() throws Exception { - InputStream input = new SampleBuilder().appendln("12.7").buildAsInputStream(); + final InputStream input = new SampleBuilder().appendln("12.7").buildAsInputStream(); - Reader reader = new Reader(input); - double nextDouble = reader.nextDouble(); + final Reader reader = new Reader(input); + final double nextDouble = reader.nextDouble(); reader.close(); assertThat(nextDouble).isCloseTo(12.7, within(0.1)); @@ -254,10 +255,10 @@ void shouldReadPositiveDoubleDozen() throws Exception { @Test void shouldReadNegativeDoubleDozen() throws Exception { - InputStream input = new SampleBuilder().appendln("-99.9").buildAsInputStream(); + final InputStream input = new SampleBuilder().appendln("-99.9").buildAsInputStream(); - Reader reader = new Reader(input); - double nextDouble = reader.nextDouble(); + final Reader reader = new Reader(input); + final double nextDouble = reader.nextDouble(); reader.close(); assertThat(nextDouble).isCloseTo(-99.9, within(0.1)); @@ -265,10 +266,10 @@ void shouldReadNegativeDoubleDozen() throws Exception { @Test void shouldReadPositiveDoubleHundred() throws Exception { - InputStream input = new SampleBuilder().appendln("612.9").buildAsInputStream(); + final InputStream input = new SampleBuilder().appendln("612.9").buildAsInputStream(); - Reader reader = new Reader(input); - double nextDouble = reader.nextDouble(); + final Reader reader = new Reader(input); + final double nextDouble = reader.nextDouble(); reader.close(); assertThat(nextDouble).isCloseTo(612.9, within(0.1)); @@ -276,10 +277,10 @@ void shouldReadPositiveDoubleHundred() throws Exception { @Test void shouldReadNegativeDoubleHundred() throws Exception { - InputStream input = new SampleBuilder().appendln("-193.6").buildAsInputStream(); + final InputStream input = new SampleBuilder().appendln("-193.6").buildAsInputStream(); - Reader reader = new Reader(input); - double nextDouble = reader.nextDouble(); + final Reader reader = new Reader(input); + final double nextDouble = reader.nextDouble(); reader.close(); assertThat(nextDouble).isCloseTo(-193.6, within(0.1)); @@ -287,10 +288,10 @@ void shouldReadNegativeDoubleHundred() throws Exception { @Test void shouldDoubleWithTwoDecimalPlaces() throws Exception { - InputStream input = new SampleBuilder().appendln("5.68").buildAsInputStream(); + final InputStream input = new SampleBuilder().appendln("5.68").buildAsInputStream(); - Reader reader = new Reader(input); - double nextDouble = reader.nextDouble(); + final Reader reader = new Reader(input); + final double nextDouble = reader.nextDouble(); reader.close(); assertThat(nextDouble).isCloseTo(5.68, within(0.1)); @@ -298,10 +299,10 @@ void shouldDoubleWithTwoDecimalPlaces() throws Exception { @Test void shouldDoubleWithThreeDecimalPlaces() throws Exception { - InputStream input = new SampleBuilder().appendln("45.771").buildAsInputStream(); + final InputStream input = new SampleBuilder().appendln("45.771").buildAsInputStream(); - Reader reader = new Reader(input); - double nextDouble = reader.nextDouble(); + final Reader reader = new Reader(input); + final double nextDouble = reader.nextDouble(); reader.close(); assertThat(nextDouble).isCloseTo(45.771, within(0.1)); @@ -309,10 +310,10 @@ void shouldDoubleWithThreeDecimalPlaces() throws Exception { @Test void shouldDoubleWithNineDecimalPlaces() throws Exception { - InputStream input = new SampleBuilder().appendln("0.123456789").buildAsInputStream(); + final InputStream input = new SampleBuilder().appendln("0.123456789").buildAsInputStream(); - Reader reader = new Reader(input); - double nextDouble = reader.nextDouble(); + final Reader reader = new Reader(input); + final double nextDouble = reader.nextDouble(); reader.close(); assertThat(nextDouble).isCloseTo(0.123456789, within(0.1)); @@ -320,16 +321,16 @@ void shouldDoubleWithNineDecimalPlaces() throws Exception { @Test void shouldReadChainOfPositiveAndNegativeDoubles() throws Exception { - InputStream input = + final InputStream input = new SampleBuilder().appendln("-1.23 98.7 -8.8 7.4 -9 7").buildAsInputStream(); - Reader reader = new Reader(input); - double first = reader.nextDouble(); - double second = reader.nextDouble(); - double third = reader.nextDouble(); - double fourth = reader.nextDouble(); - double fifth = reader.nextDouble(); - double sixth = reader.nextDouble(); + final Reader reader = new Reader(input); + final double first = reader.nextDouble(); + final double second = reader.nextDouble(); + final double third = reader.nextDouble(); + final double fourth = reader.nextDouble(); + final double fifth = reader.nextDouble(); + final double sixth = reader.nextDouble(); reader.close(); assertThat(first).isCloseTo(-1.23, within(0.1)); @@ -342,10 +343,10 @@ void shouldReadChainOfPositiveAndNegativeDoubles() throws Exception { @Test void shouldReadPositiveLong() throws Exception { - InputStream input = new SampleBuilder().appendln("8172368367890").buildAsInputStream(); + final InputStream input = new SampleBuilder().appendln("8172368367890").buildAsInputStream(); - Reader reader = new Reader(input); - long nextLong = reader.nextLong(); + final Reader reader = new Reader(input); + final long nextLong = reader.nextLong(); reader.close(); assertThat(nextLong).isEqualTo(8172368367890L); @@ -353,10 +354,10 @@ void shouldReadPositiveLong() throws Exception { @Test void shouldReadNegativeLong() throws Exception { - InputStream input = new SampleBuilder().appendln("-123578918902").buildAsInputStream(); + final InputStream input = new SampleBuilder().appendln("-123578918902").buildAsInputStream(); - Reader reader = new Reader(input); - long nextLong = reader.nextLong(); + final Reader reader = new Reader(input); + final long nextLong = reader.nextLong(); reader.close(); assertThat(nextLong).isEqualTo(-123578918902L); @@ -364,17 +365,17 @@ void shouldReadNegativeLong() throws Exception { @Test void shouldReadChainOfPositiveAndNegativeLongs() throws Exception { - InputStream input = new SampleBuilder() + final InputStream input = new SampleBuilder() .appendln("8172368367890 -1789236812893 891723689713 -31723581237 59787712587 -123123123123") .buildAsInputStream(); - Reader reader = new Reader(input); - long first = reader.nextLong(); - long second = reader.nextLong(); - long third = reader.nextLong(); - long fourth = reader.nextLong(); - long fifth = reader.nextLong(); - long sixth = reader.nextLong(); + final Reader reader = new Reader(input); + final long first = reader.nextLong(); + final long second = reader.nextLong(); + final long third = reader.nextLong(); + final long fourth = reader.nextLong(); + final long fifth = reader.nextLong(); + final long sixth = reader.nextLong(); reader.close(); assertThat(first).isEqualTo(8172368367890L); @@ -387,15 +388,15 @@ void shouldReadChainOfPositiveAndNegativeLongs() throws Exception { @Test void shouldReadLongsWithSpacesAndLineBreaks() throws Exception { - InputStream input = new SampleBuilder() + final InputStream input = new SampleBuilder() .appendln("6546546565 -4326757896") .appendln("786676767") .buildAsInputStream(); - Reader reader = new Reader(input); - long first = reader.nextLong(); - long second = reader.nextLong(); - long third = reader.nextLong(); + final Reader reader = new Reader(input); + final long first = reader.nextLong(); + final long second = reader.nextLong(); + final long third = reader.nextLong(); reader.close(); assertThat(first).isEqualTo(6546546565L); @@ -405,10 +406,10 @@ void shouldReadLongsWithSpacesAndLineBreaks() throws Exception { @Test void shouldReadChar() throws Exception { - InputStream input = new SampleBuilder().appendln("a").buildAsInputStream(); + final InputStream input = new SampleBuilder().appendln("a").buildAsInputStream(); - Reader reader = new Reader(input); - char nextChar = reader.nextChar(); + final Reader reader = new Reader(input); + final char nextChar = reader.nextChar(); reader.close(); assertThat(nextChar).isEqualTo('a'); @@ -416,12 +417,12 @@ void shouldReadChar() throws Exception { @Test void shouldReadMultipleChars() throws Exception { - InputStream input = new SampleBuilder().appendln("a 1 /").buildAsInputStream(); + final InputStream input = new SampleBuilder().appendln("a 1 /").buildAsInputStream(); - Reader reader = new Reader(input); - char a = reader.nextChar(); - char one = reader.nextChar(); - char slash = reader.nextChar(); + final Reader reader = new Reader(input); + final char a = reader.nextChar(); + final char one = reader.nextChar(); + final char slash = reader.nextChar(); reader.close(); assertThat(a).isEqualTo('a'); @@ -431,14 +432,14 @@ void shouldReadMultipleChars() throws Exception { @Test void shouldReadIntegersWithOtherCharactersInBetween() throws Exception { - InputStream input = new SampleBuilder().appendln("12a34Z56&78/9").buildAsInputStream(); + final InputStream input = new SampleBuilder().appendln("12a34Z56&78/9").buildAsInputStream(); - Reader reader = new Reader(input); - int firstInt = reader.nextInt(); - int secondInt = reader.nextInt(); - int thirdInt = reader.nextInt(); - int fourthInt = reader.nextInt(); - int fifthInt = reader.nextInt(); + final Reader reader = new Reader(input); + final int firstInt = reader.nextInt(); + final int secondInt = reader.nextInt(); + final int thirdInt = reader.nextInt(); + final int fourthInt = reader.nextInt(); + final int fifthInt = reader.nextInt(); reader.close(); assertThat(firstInt).isEqualTo(12); @@ -450,14 +451,14 @@ void shouldReadIntegersWithOtherCharactersInBetween() throws Exception { @Test void shouldReadLongsWithOtherCharactersInBetween() throws Exception { - InputStream input = new SampleBuilder().appendln("12a34Z56&78/9").buildAsInputStream(); + final InputStream input = new SampleBuilder().appendln("12a34Z56&78/9").buildAsInputStream(); - Reader reader = new Reader(input); - long firstLong = reader.nextLong(); - long secondLong = reader.nextLong(); - long thirdLong = reader.nextLong(); - long fourthLong = reader.nextLong(); - long fifthLong = reader.nextLong(); + final Reader reader = new Reader(input); + final long firstLong = reader.nextLong(); + final long secondLong = reader.nextLong(); + final long thirdLong = reader.nextLong(); + final long fourthLong = reader.nextLong(); + final long fifthLong = reader.nextLong(); reader.close(); assertThat(firstLong).isEqualTo(12); @@ -469,14 +470,15 @@ void shouldReadLongsWithOtherCharactersInBetween() throws Exception { @Test void shouldReadDoublesWithOtherCharactersInBetween() throws Exception { - InputStream input = new SampleBuilder().appendln("12a3.4Z56&7.88/9").buildAsInputStream(); + final InputStream input = + new SampleBuilder().appendln("12a3.4Z56&7.88/9").buildAsInputStream(); - Reader reader = new Reader(input); - double firstDouble = reader.nextDouble(); - double secondDouble = reader.nextDouble(); - double thirdDouble = reader.nextDouble(); - double fourthDouble = reader.nextDouble(); - double fifthDouble = reader.nextDouble(); + final Reader reader = new Reader(input); + final double firstDouble = reader.nextDouble(); + final double secondDouble = reader.nextDouble(); + final double thirdDouble = reader.nextDouble(); + final double fourthDouble = reader.nextDouble(); + final double fifthDouble = reader.nextDouble(); reader.close(); assertThat(firstDouble).isCloseTo(12, within(0.1)); @@ -488,11 +490,11 @@ void shouldReadDoublesWithOtherCharactersInBetween() throws Exception { @Test void shouldSkipNChars() throws Exception { - InputStream input = new SampleBuilder().appendln("Dia 5").buildAsInputStream(); + final InputStream input = new SampleBuilder().appendln("Dia 5").buildAsInputStream(); - Reader reader = new Reader(input); + final Reader reader = new Reader(input); reader.skip(4); - int day = reader.nextInt(); + final int day = reader.nextInt(); reader.close(); assertThat(day).isEqualTo(5); diff --git a/src/test/java/io/github/diegourban/algorithms/math/NumberTheoryPropertyTest.java b/src/test/java/io/github/diegourban/algorithms/math/NumberTheoryPropertyTest.java index c2bdc4b..0e65f2d 100644 --- a/src/test/java/io/github/diegourban/algorithms/math/NumberTheoryPropertyTest.java +++ b/src/test/java/io/github/diegourban/algorithms/math/NumberTheoryPropertyTest.java @@ -13,13 +13,13 @@ class NumberTheoryPropertyTest { @Property - void bothGcdStrategiesAgree(@ForAll @LongRange(min = 0) long a, @ForAll @LongRange(min = 0) long b) { + void bothGcdStrategiesAgree(@ForAll @LongRange(min = 0) final long a, @ForAll @LongRange(min = 0) final long b) { assertThat(NumberTheory.gcdLoop(a, b)).isEqualTo(NumberTheory.gcdRecursive(a, b)); } @Property - void gcdDividesBothNumbers(@ForAll @LongRange(min = 1) long a, @ForAll @LongRange(min = 1) long b) { - var gcd = NumberTheory.gcdLoop(a, b); + void gcdDividesBothNumbers(@ForAll @LongRange(min = 1) final long a, @ForAll @LongRange(min = 1) final long b) { + final var gcd = NumberTheory.gcdLoop(a, b); assertThat(a % gcd).isZero(); assertThat(b % gcd).isZero(); @@ -27,26 +27,28 @@ void gcdDividesBothNumbers(@ForAll @LongRange(min = 1) long a, @ForAll @LongRang @Property void lcmTimesGcdIsTheProduct( - @ForAll @LongRange(min = 1, max = 1_000_000) long a, @ForAll @LongRange(min = 1, max = 1_000_000) long b) { + @ForAll @LongRange(min = 1, max = 1_000_000) final long a, + @ForAll @LongRange(min = 1, max = 1_000_000) final long b) { assertThat(NumberTheory.lcm(a, b) * NumberTheory.gcdLoop(a, b)).isEqualTo(a * b); } @Property void lcmOfAListIsAMultipleOfEveryElement( - @ForAll @Size(min = 1, max = 6) List<@LongRange(min = 1, max = 1_000) Long> numbers) { - var lcm = NumberTheory.lcm(numbers.stream().mapToLong(Long::longValue).toArray()); + @ForAll @Size(min = 1, max = 6) final List<@LongRange(min = 1, max = 1_000) Long> numbers) { + final var lcm = + NumberTheory.lcm(numbers.stream().mapToLong(Long::longValue).toArray()); assertThat(numbers).allSatisfy(n -> assertThat(lcm % n).isZero()); } @Property - void isPrimeAgreesWithTrialDivision(@ForAll @IntRange(min = -10, max = 200_000) int n) { + void isPrimeAgreesWithTrialDivision(@ForAll @IntRange(min = -10, max = 200_000) final int n) { assertThat(NumberTheory.isPrime(n)).isEqualTo(isPrimeByTrialDivision(n)); } @Property - void primeFactorsMultiplyBackToTheNumber(@ForAll @IntRange(min = 2, max = 10_000_000) int n) { - var factors = NumberTheory.primeFactorsList(n); + void primeFactorsMultiplyBackToTheNumber(@ForAll @IntRange(min = 2, max = 10_000_000) final int n) { + final var factors = NumberTheory.primeFactorsList(n); assertThat(factors.stream().mapToLong(Integer::longValue).reduce(1, (x, y) -> x * y)) .isEqualTo(n); @@ -56,11 +58,11 @@ void primeFactorsMultiplyBackToTheNumber(@ForAll @IntRange(min = 2, max = 10_000 } @Property - void primeFactorsSetHoldsTheDistinctFactors(@ForAll @IntRange(min = 2, max = 10_000_000) int n) { + void primeFactorsSetHoldsTheDistinctFactors(@ForAll @IntRange(min = 2, max = 10_000_000) final int n) { assertThat(NumberTheory.primeFactorsSet(n)).isEqualTo(new HashSet<>(NumberTheory.primeFactorsList(n))); } - private static boolean isPrimeByTrialDivision(int n) { + private static boolean isPrimeByTrialDivision(final int n) { if (n < 2) { return false; } diff --git a/src/test/java/io/github/diegourban/algorithms/math/NumberTheoryTest.java b/src/test/java/io/github/diegourban/algorithms/math/NumberTheoryTest.java index 028a536..6bb46af 100644 --- a/src/test/java/io/github/diegourban/algorithms/math/NumberTheoryTest.java +++ b/src/test/java/io/github/diegourban/algorithms/math/NumberTheoryTest.java @@ -124,7 +124,7 @@ void shouldHandleNotPrimeNumbers() { @Test void shouldListPrimeFactorsOfEvenNumber() { - List primeFactors = NumberTheory.primeFactorsList(10); + final List primeFactors = NumberTheory.primeFactorsList(10); assertThat(primeFactors).hasSize(2); assertThat(primeFactors.get(0).intValue()).isEqualTo(2); assertThat(primeFactors.get(1).intValue()).isEqualTo(5); @@ -132,7 +132,7 @@ void shouldListPrimeFactorsOfEvenNumber() { @Test void shouldListPrimeFactorsOfOddNumber() { - List primeFactors = NumberTheory.primeFactorsList(49); + final List primeFactors = NumberTheory.primeFactorsList(49); assertThat(primeFactors).hasSize(2); assertThat(primeFactors.get(0).intValue()).isEqualTo(7); assertThat(primeFactors.get(1).intValue()).isEqualTo(7); @@ -140,26 +140,26 @@ void shouldListPrimeFactorsOfOddNumber() { @Test void shouldListPrimeFactorsOfPrimeNumber() { - List primeFactors = NumberTheory.primeFactorsList(13); + final List primeFactors = NumberTheory.primeFactorsList(13); assertThat(primeFactors).hasSize(1); assertThat(primeFactors.get(0).intValue()).isEqualTo(13); } @Test void shouldCreateSetOfPrimeFactorsOfEvenNumber() { - Set primeFactors = NumberTheory.primeFactorsSet(12); + final Set primeFactors = NumberTheory.primeFactorsSet(12); assertThat(primeFactors).hasSize(2).contains(2).contains(3); } @Test void shouldCreateSetOfPrimeFactorsOfOddNumber() { - Set primeFactors = NumberTheory.primeFactorsSet(49); + final Set primeFactors = NumberTheory.primeFactorsSet(49); assertThat(primeFactors).hasSize(1).contains(7); } @Test void shouldCreateSetOfPrimeFactorsOfPrimeNumber() { - Set primeFactors = NumberTheory.primeFactorsSet(7); + final Set primeFactors = NumberTheory.primeFactorsSet(7); assertThat(primeFactors).hasSize(1).contains(7); } } diff --git a/src/test/java/io/github/diegourban/algorithms/math/SequencesPropertyTest.java b/src/test/java/io/github/diegourban/algorithms/math/SequencesPropertyTest.java index d7b2ff8..9cb25d3 100644 --- a/src/test/java/io/github/diegourban/algorithms/math/SequencesPropertyTest.java +++ b/src/test/java/io/github/diegourban/algorithms/math/SequencesPropertyTest.java @@ -14,26 +14,26 @@ class SequencesPropertyTest { @Property(generation = GenerationMode.EXHAUSTIVE) - void fibonacciIsExactUpTo46(@ForAll @IntRange(min = 0, max = 46) int n) { + void fibonacciIsExactUpTo46(@ForAll @IntRange(min = 0, max = 46) final int n) { assertThat(BigInteger.valueOf(Sequences.fibonacci(n))).isEqualTo(exactFibonacci(n)); } @Property(generation = GenerationMode.EXHAUSTIVE) - void simpleBinetFormulaRoundsToTheExactValueUpTo67(@ForAll @IntRange(min = 0, max = 67) int n) { + void simpleBinetFormulaRoundsToTheExactValueUpTo67(@ForAll @IntRange(min = 0, max = 67) final int n) { assertThat(BigInteger.valueOf(Math.round(Sequences.fibonacciSimpleBinetFormula(n)))) .isEqualTo(exactFibonacci(n)); } @Property(generation = GenerationMode.EXHAUSTIVE) - void binetFormulaIsExactUpTo71(@ForAll @IntRange(min = 0, max = 71) int n) { + void binetFormulaIsExactUpTo71(@ForAll @IntRange(min = 0, max = 71) final int n) { assertThat(Sequences.fibonacciBinetFormula(n)).isEqualTo(exactFibonacci(n)); } - private static BigInteger exactFibonacci(int n) { + private static BigInteger exactFibonacci(final int n) { var previous = BigInteger.ZERO; var current = BigInteger.ONE; for (var i = 0; i < n; i++) { - var next = previous.add(current); + final var next = previous.add(current); previous = current; current = next; } diff --git a/src/test/java/io/github/diegourban/algorithms/math/StatisticsPropertyTest.java b/src/test/java/io/github/diegourban/algorithms/math/StatisticsPropertyTest.java index de59fb2..3cbc692 100644 --- a/src/test/java/io/github/diegourban/algorithms/math/StatisticsPropertyTest.java +++ b/src/test/java/io/github/diegourban/algorithms/math/StatisticsPropertyTest.java @@ -14,30 +14,31 @@ class StatisticsPropertyTest { @Property void meanLiesBetweenMinAndMax( - @ForAll @Size(min = 1, max = 50) List<@DoubleRange(min = -1e6, max = 1e6) Double> values) { - var data = values.stream().mapToDouble(Double::doubleValue).toArray(); - var min = Arrays.stream(data).min().orElseThrow(); - var max = Arrays.stream(data).max().orElseThrow(); + @ForAll @Size(min = 1, max = 50) final List<@DoubleRange(min = -1e6, max = 1e6) Double> values) { + final var data = values.stream().mapToDouble(Double::doubleValue).toArray(); + final var min = Arrays.stream(data).min().orElseThrow(); + final var max = Arrays.stream(data).max().orElseThrow(); assertThat(Statistics.mean(data)).isBetween(min - 1e-6, max + 1e-6); } @Property void medianIsTheMiddleOfTheSortedData( - @ForAll @Size(min = 1, max = 50) List<@DoubleRange(min = -1e6, max = 1e6) Double> values) { - var data = values.stream().mapToDouble(Double::doubleValue).toArray(); - var sorted = data.clone(); + @ForAll @Size(min = 1, max = 50) final List<@DoubleRange(min = -1e6, max = 1e6) Double> values) { + final var data = values.stream().mapToDouble(Double::doubleValue).toArray(); + final var sorted = data.clone(); Arrays.sort(sorted); - var middle = sorted.length / 2; - var expected = sorted.length % 2 == 1 ? sorted[middle] : (sorted[middle - 1] + sorted[middle]) / 2.0; + final var middle = sorted.length / 2; + final var expected = sorted.length % 2 == 1 ? sorted[middle] : (sorted[middle - 1] + sorted[middle]) / 2.0; assertThat(Statistics.median(data.clone())).isCloseTo(expected, within(1e-9)); } @Property - void modeIsOneOfTheValues(@ForAll @Size(min = 1, max = 50) List<@DoubleRange(min = -5, max = 5) Double> values) { - var data = values.stream().mapToDouble(Double::doubleValue).toArray(); - var rounded = Arrays.stream(data).map(Math::rint).toArray(); // few distinct values, so repeats are likely + void modeIsOneOfTheValues( + @ForAll @Size(min = 1, max = 50) final List<@DoubleRange(min = -5, max = 5) Double> values) { + final var data = values.stream().mapToDouble(Double::doubleValue).toArray(); + final var rounded = Arrays.stream(data).map(Math::rint).toArray(); // few distinct values, so repeats are likely assertThat(rounded).contains(Statistics.mode(rounded)); } diff --git a/src/test/java/io/github/diegourban/algorithms/math/TriangleTypeTest.java b/src/test/java/io/github/diegourban/algorithms/math/TriangleTypeTest.java index b1f8a00..078a567 100644 --- a/src/test/java/io/github/diegourban/algorithms/math/TriangleTypeTest.java +++ b/src/test/java/io/github/diegourban/algorithms/math/TriangleTypeTest.java @@ -9,7 +9,7 @@ class TriangleTypeTest { @ParameterizedTest @CsvSource({"EQUILATERAL, Equilatero", "ISOSCELES, Isoceles", "ESCALENE, Escaleno"}) - void exposesDisplayName(TriangleType type, String expectedName) { + void exposesDisplayName(final TriangleType type, final String expectedName) { assertThat(type.getName()).isEqualTo(expectedName); } } diff --git a/src/test/java/io/github/diegourban/algorithms/problems/bit/DeltaBitsTest.java b/src/test/java/io/github/diegourban/algorithms/problems/bit/DeltaBitsTest.java index 8fa214f..cf5fe3b 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/bit/DeltaBitsTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/bit/DeltaBitsTest.java @@ -12,7 +12,7 @@ */ class DeltaBitsTest { - static int solve(int a, int b) { + static int solve(final int a, final int b) { return Integer.bitCount(a ^ b); } @@ -28,7 +28,7 @@ static int solve(int a, int b) { "7, 17, 3", "330274332, 199260599, 19", }) - void countsDifferingBits(int a, int b, int expected) { + void countsDifferingBits(final int a, final int b, final int expected) { assertThat(solve(a, b)).isEqualTo(expected); } } diff --git a/src/test/java/io/github/diegourban/algorithms/problems/bit/FindUniqueIdTest.java b/src/test/java/io/github/diegourban/algorithms/problems/bit/FindUniqueIdTest.java index 5835edc..fb6d993 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/bit/FindUniqueIdTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/bit/FindUniqueIdTest.java @@ -13,9 +13,9 @@ */ class FindUniqueIdTest { - static int solve(int[] ids) { + static int solve(final int[] ids) { var unique = 0; - for (var id : ids) { + for (final var id : ids) { unique ^= id; } return unique; diff --git a/src/test/java/io/github/diegourban/algorithms/problems/bit/ParityTest.java b/src/test/java/io/github/diegourban/algorithms/problems/bit/ParityTest.java index f090e11..8fe6b20 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/bit/ParityTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/bit/ParityTest.java @@ -14,8 +14,8 @@ */ class ParityTest { - static String solve(String bits) { - var ones = bits.chars().filter(c -> c == '1').count(); + static String solve(final String bits) { + final var ones = bits.chars().filter(c -> c == '1').count(); return bits + (ones % 2 == 0 ? '0' : '1'); } @@ -41,7 +41,7 @@ void oddCountOfOnesAppendsOne() { @Test void handlesHundredBits() { - var bits = + final var bits = "0101011001101010011001010101001010101010101010101011010010101010101011010110101010000101010101010101"; assertThat(solve(bits)).isEqualTo(bits + "1"); } diff --git a/src/test/java/io/github/diegourban/algorithms/problems/bit/ToCarryOrNotToCarryTest.java b/src/test/java/io/github/diegourban/algorithms/problems/bit/ToCarryOrNotToCarryTest.java index 7720389..5860e00 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/bit/ToCarryOrNotToCarryTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/bit/ToCarryOrNotToCarryTest.java @@ -22,16 +22,16 @@ class ToCarryOrNotToCarryTest { private static final SampleLoader SAMPLES = new SampleLoader("problems/bit/to-carry-or-not-to-carry"); - static long solve(long a, long b) { + static long solve(final long a, final long b) { return a ^ b; } - static String run(InputStream in) throws IOException { - var reader = new Reader(in); - var out = new StringBuilder(); + static String run(final InputStream in) throws IOException { + final var reader = new Reader(in); + final var out = new StringBuilder(); while (true) { - long a; - long b; + final long a; + final long b; try { a = reader.nextLong(); b = reader.nextLong(); @@ -62,7 +62,7 @@ void handlesUnsigned32BitValues() { @ParameterizedTest @ValueSource(strings = {"udebug"}) - void matchesSample(String name) throws IOException { + void matchesSample(final String name) throws IOException { assertThat(run(SAMPLES.loadAsInputStream(name + ".in"))).isEqualTo(SAMPLES.loadAsString(name + ".out")); } } diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/array/EqualSidesOfAnArrayTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/array/EqualSidesOfAnArrayTest.java index d47f364..754b82b 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/array/EqualSidesOfAnArrayTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/array/EqualSidesOfAnArrayTest.java @@ -14,10 +14,10 @@ */ class EqualSidesOfAnArrayTest { - static int solve(int[] arr) { + static int solve(final int[] arr) { for (var i = 0; i < arr.length; i++) { - var leftSum = Arrays.stream(arr, 0, i).sum(); - var rightSum = Arrays.stream(arr, i + 1, arr.length).sum(); + final var leftSum = Arrays.stream(arr, 0, i).sum(); + final var rightSum = Arrays.stream(arr, i + 1, arr.length).sum(); if (leftSum == rightSum) { return i; } diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/array/LargestDifferenceTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/array/LargestDifferenceTest.java index 41b44c5..0c53d4b 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/array/LargestDifferenceTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/array/LargestDifferenceTest.java @@ -15,7 +15,7 @@ */ class LargestDifferenceTest { - static int solve(int[] data) { + static int solve(final int[] data) { var largest = 0; for (var i = 0; i < data.length; i++) { for (var j = data.length - 1; j > i; j--) { diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/array/SingleRiffleCheckTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/array/SingleRiffleCheckTest.java index 6eea47e..6417ddb 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/array/SingleRiffleCheckTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/array/SingleRiffleCheckTest.java @@ -14,10 +14,10 @@ */ class SingleRiffleCheckTest { - static boolean solve(int[] half1, int[] half2, int[] deck) { + static boolean solve(final int[] half1, final int[] half2, final int[] deck) { var i1 = 0; var i2 = 0; - for (var card : deck) { + for (final var card : deck) { if (i1 < half1.length && card == half1[i1]) { i1++; } else if (i2 < half2.length && card == half2[i2]) { diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/array/TheForceAwakensTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/array/TheForceAwakensTest.java index 81287cd..b497588 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/array/TheForceAwakensTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/array/TheForceAwakensTest.java @@ -27,7 +27,7 @@ class TheForceAwakensTest { /** A 1-based terrain position. */ record Position(int row, int column) {} - static Optional solve(int[][] terrain) { + static Optional solve(final int[][] terrain) { for (var i = 1; i < terrain.length - 1; i++) { for (var j = 1; j < terrain[i].length - 1; j++) { if (terrain[i][j] == LIGHTSABER && isSurroundedByGuards(terrain, i, j)) { @@ -38,7 +38,7 @@ static Optional solve(int[][] terrain) { return Optional.empty(); } - private static boolean isSurroundedByGuards(int[][] terrain, int row, int column) { + private static boolean isSurroundedByGuards(final int[][] terrain, final int row, final int column) { for (var di = -1; di <= 1; di++) { for (var dj = -1; dj <= 1; dj++) { if ((di != 0 || dj != 0) && terrain[row + di][column + dj] != GUARD) { @@ -49,23 +49,23 @@ private static boolean isSurroundedByGuards(int[][] terrain, int row, int column return true; } - static String run(InputStream in) throws IOException { - var reader = new Reader(in); - var n = reader.nextInt(); - var m = reader.nextInt(); - var terrain = new int[n][m]; + static String run(final InputStream in) throws IOException { + final var reader = new Reader(in); + final var n = reader.nextInt(); + final var m = reader.nextInt(); + final var terrain = new int[n][m]; for (var i = 0; i < n; i++) { for (var j = 0; j < m; j++) { terrain[i][j] = reader.nextInt(); } } - var position = solve(terrain).orElse(new Position(0, 0)); + final var position = solve(terrain).orElse(new Position(0, 0)); return position.row() + " " + position.column() + "\n"; } @Test void findsTheGuardedLightsaber() { - int[][] terrain = { + final int[][] terrain = { {7, 7, 7, 1}, {7, 42, 7, 1}, {7, 7, 7, 1}, @@ -75,7 +75,7 @@ void findsTheGuardedLightsaber() { @Test void ignoresLightsaberMissingAGuard() { - int[][] terrain = { + final int[][] terrain = { {7, 7, 7}, {7, 42, 7}, {7, 7, 0}, @@ -85,7 +85,7 @@ void ignoresLightsaberMissingAGuard() { @Test void ignoresLightsaberOnTheBorder() { - int[][] terrain = { + final int[][] terrain = { {42, 7, 7}, {7, 7, 7}, {7, 7, 7}, @@ -95,7 +95,7 @@ void ignoresLightsaberOnTheBorder() { @Test void skipsUnguardedCandidateAndFindsTheNextOne() { - int[][] terrain = { + final int[][] terrain = { {7, 7, 7, 7, 7}, {0, 42, 7, 42, 7}, {7, 7, 7, 7, 7}, @@ -105,8 +105,8 @@ void skipsUnguardedCandidateAndFindsTheNextOne() { @ParameterizedTest @ValueSource(strings = {"uri1", "uri2", "uri3", "udebug"}) - void matchesSample(String name) throws IOException { - var samples = new SampleLoader("problems/datastructure/array/the-force-awakens"); + void matchesSample(final String name) throws IOException { + final var samples = new SampleLoader("problems/datastructure/array/the-force-awakens"); assertThat(run(samples.loadAsInputStream(name + ".in"))).isEqualTo(samples.loadAsString(name + ".out")); } } diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/graph/GraphColoringTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/graph/GraphColoringTest.java index 4f265dc..ec44039 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/graph/GraphColoringTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/graph/GraphColoringTest.java @@ -23,28 +23,28 @@ private static final class GraphNode { private final Set neighbors = new HashSet<>(); private String color; - private GraphNode(String label) { + private GraphNode(final String label) { this.label = label; } - private void connect(GraphNode other) { + private void connect(final GraphNode other) { neighbors.add(other); other.neighbors.add(this); } } - static void solve(List graph, List colors) { - for (var node : graph) { + static void solve(final List graph, final List colors) { + for (final var node : graph) { if (node.neighbors.contains(node)) { throw new IllegalArgumentException("Legal coloring impossible for node with loop: " + node.label); } - var illegalColors = new HashSet(); - for (var neighbor : node.neighbors) { + final var illegalColors = new HashSet(); + for (final var neighbor : node.neighbors) { if (neighbor.color != null) { illegalColors.add(neighbor.color); } } - for (var color : colors) { + for (final var color : colors) { if (!illegalColors.contains(color)) { node.color = color; break; @@ -55,26 +55,27 @@ static void solve(List graph, List colors) { @Test void colorsAPathWithoutNeighborClashes() { - var a = new GraphNode("a"); - var b = new GraphNode("b"); - var c = new GraphNode("c"); + final var a = new GraphNode("a"); + final var b = new GraphNode("b"); + final var c = new GraphNode("c"); a.connect(b); b.connect(c); - var colors = List.of("red", "green", "blue"); + final var colors = List.of("red", "green", "blue"); solve(List.of(a, b, c), colors); assertThat(b.color).isIn(colors); - var remaining = colors.stream().filter(color -> !color.equals(b.color)).toList(); + final var remaining = + colors.stream().filter(color -> !color.equals(b.color)).toList(); assertThat(a.color).isIn(remaining); assertThat(c.color).isIn(remaining); } @Test void colorsATriangleWithThreeDistinctColors() { - var a = new GraphNode("a"); - var b = new GraphNode("b"); - var c = new GraphNode("c"); + final var a = new GraphNode("a"); + final var b = new GraphNode("b"); + final var c = new GraphNode("c"); a.connect(b); b.connect(c); c.connect(a); @@ -86,7 +87,7 @@ void colorsATriangleWithThreeDistinctColors() { @Test void nodeWithLoopCannotBeColored() { - var a = new GraphNode("a"); + final var a = new GraphNode("a"); a.neighbors.add(a); assertThatIllegalArgumentException().isThrownBy(() -> solve(List.of(a), List.of("red", "green"))); diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/graph/MeshMessageTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/graph/MeshMessageTest.java index e692e1a..f91da46 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/graph/MeshMessageTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/graph/MeshMessageTest.java @@ -20,24 +20,24 @@ */ class MeshMessageTest { - static String[] solve(Map graph, String start, String end) { + static String[] solve(final Map graph, final String start, final String end) { if (!graph.containsKey(start)) { throw new IllegalArgumentException("Start node not in graph"); } if (!graph.containsKey(end)) { throw new IllegalArgumentException("End node not in graph"); } - var toVisit = new ArrayDeque(); + final var toVisit = new ArrayDeque(); toVisit.add(start); - var reachedFrom = new HashMap(); + final var reachedFrom = new HashMap(); reachedFrom.put(start, null); while (!toVisit.isEmpty()) { - var current = toVisit.remove(); + final var current = toVisit.remove(); if (current.equals(end)) { return path(reachedFrom, end); } - for (var neighbor : graph.get(current)) { + for (final var neighbor : graph.get(current)) { if (!reachedFrom.containsKey(neighbor)) { toVisit.add(neighbor); reachedFrom.put(neighbor, current); @@ -47,8 +47,8 @@ static String[] solve(Map graph, String start, String end) { return null; } - private static String[] path(Map reachedFrom, String end) { - var path = new ArrayList(); + private static String[] path(final Map reachedFrom, final String end) { + final var path = new ArrayList(); for (var node = end; node != null; node = reachedFrom.get(node)) { path.add(node); } @@ -58,21 +58,21 @@ private static String[] path(Map reachedFrom, String end) { @Test void unknownSenderIsRejected() { - var graph = Map.of("Foo", new String[] {"A", "B"}); + final var graph = Map.of("Foo", new String[] {"A", "B"}); assertThatIllegalArgumentException().isThrownBy(() -> solve(graph, "Bar", "Baz")); } @Test void unknownRecipientIsRejected() { - var graph = Map.of("Foo", new String[] {"A", "B"}); + final var graph = Map.of("Foo", new String[] {"A", "B"}); assertThatIllegalArgumentException().isThrownBy(() -> solve(graph, "Foo", "Baz")); } @Test void disconnectedRecipientHasNoPath() { - var graph = Map.of( + final var graph = Map.of( "Foo", new String[] {"Bar"}, "Bar", new String[] {"Foo"}, "Baz", new String[] {"Asdf"}, @@ -83,7 +83,7 @@ void disconnectedRecipientHasNoPath() { @Test void loopsDoNotPreventTermination() { - var graph = Map.of( + final var graph = Map.of( "Foo", new String[] {"Asdf", "Bar"}, "Asdf", new String[] {"Foo", "Bar"}, "Bar", new String[] {"Foo", "Asdf", "Baz"}, @@ -94,7 +94,7 @@ void loopsDoNotPreventTermination() { @Test void findsShortestRoute() { - var graph = Map.of( + final var graph = Map.of( "Min", new String[] {"William", "Jayden"}, "William", new String[] {"Min"}, "Jayden", new String[] {"Min", "Amelia", "Ren"}, @@ -108,7 +108,7 @@ void findsShortestRoute() { @Test void senderIsRecipient() { - var graph = Map.of("Foo", new String[] {}); + final var graph = Map.of("Foo", new String[] {}); assertThat(solve(graph, "Foo", "Foo")).containsExactly("Foo"); } diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/linkedlist/DeleteNodeTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/linkedlist/DeleteNodeTest.java index 3689828..f24a10d 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/linkedlist/DeleteNodeTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/linkedlist/DeleteNodeTest.java @@ -17,8 +17,8 @@ */ class DeleteNodeTest { - static void solve(LinkedListNode nodeToDelete) { - var next = nodeToDelete.getNext(); + static void solve(final LinkedListNode nodeToDelete) { + final var next = nodeToDelete.getNext(); if (next == null) { throw new IllegalArgumentException("Can't delete the last node with this method!"); } @@ -28,9 +28,9 @@ static void solve(LinkedListNode nodeToDelete) { @Test void deletesAMiddleNode() { - var a = new LinkedListNode(new Element("A")); - var b = new LinkedListNode(new Element("B")); - var c = new LinkedListNode(new Element("C")); + final var a = new LinkedListNode(new Element("A")); + final var b = new LinkedListNode(new Element("B")); + final var c = new LinkedListNode(new Element("C")); a.setNext(b); b.setNext(c); @@ -42,7 +42,7 @@ void deletesAMiddleNode() { @Test void lastNodeCannotBeDeleted() { - var a = new LinkedListNode(new Element("A")); + final var a = new LinkedListNode(new Element("A")); assertThatIllegalArgumentException().isThrownBy(() -> solve(a)); } diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/linkedlist/FindRepeatBeastModeTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/linkedlist/FindRepeatBeastModeTest.java index f10ceec..d7ec90d 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/linkedlist/FindRepeatBeastModeTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/linkedlist/FindRepeatBeastModeTest.java @@ -15,8 +15,8 @@ */ class FindRepeatBeastModeTest { - static int solve(int[] numbers) { - var head = numbers.length; + static int solve(final int[] numbers) { + final var head = numbers.length; var positionInCycle = head; for (var step = 0; step < numbers.length - 1; step++) { @@ -42,7 +42,7 @@ static int solve(int[] numbers) { return behind; } - private static int next(int[] numbers, int position) { + private static int next(final int[] numbers, final int position) { return numbers[position - 1]; } diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/linkedlist/LinkedListCycleTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/linkedlist/LinkedListCycleTest.java index ec88c5c..15b707e 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/linkedlist/LinkedListCycleTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/linkedlist/LinkedListCycleTest.java @@ -16,7 +16,7 @@ */ class LinkedListCycleTest { - static boolean solve(LinkedListNode first) { + static boolean solve(final LinkedListNode first) { var slow = first; var fast = first; while (fast != null && fast.getNext() != null) { @@ -29,8 +29,8 @@ static boolean solve(LinkedListNode first) { return false; } - private static LinkedListNode[] chain(String... names) { - var nodes = new LinkedListNode[names.length]; + private static LinkedListNode[] chain(final String... names) { + final var nodes = new LinkedListNode[names.length]; for (var i = 0; i < names.length; i++) { nodes[i] = new LinkedListNode(new Element(names[i])); if (i > 0) { @@ -42,14 +42,14 @@ private static LinkedListNode[] chain(String... names) { @Test void acyclicListHasNoCycle() { - var nodes = chain("A", "B", "C"); + final var nodes = chain("A", "B", "C"); assertThat(solve(nodes[0])).isFalse(); } @Test void tailPointingAtHeadIsACycle() { - var nodes = chain("A", "B", "C"); + final var nodes = chain("A", "B", "C"); nodes[2].setNext(nodes[0]); assertThat(solve(nodes[0])).isTrue(); @@ -57,7 +57,7 @@ void tailPointingAtHeadIsACycle() { @Test void tailPointingInsideIsACycle() { - var nodes = chain("A", "B", "C"); + final var nodes = chain("A", "B", "C"); nodes[2].setNext(nodes[1]); assertThat(solve(nodes[0])).isTrue(); diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/linkedlist/MergeSortedLinkedListsTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/linkedlist/MergeSortedLinkedListsTest.java index 354d948..68adbc0 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/linkedlist/MergeSortedLinkedListsTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/linkedlist/MergeSortedLinkedListsTest.java @@ -20,13 +20,13 @@ private static final class Node { private final int data; private Node next; - private Node(int data) { + private Node(final int data) { this.data = data; } } - static Node solve(Node headA, Node headB) { - var sentinel = new Node(0); + static Node solve(final Node headA, final Node headB) { + final var sentinel = new Node(0); var tail = sentinel; var a = headA; var b = headB; @@ -44,18 +44,18 @@ static Node solve(Node headA, Node headB) { return sentinel.next; } - private static Node list(int... values) { - var sentinel = new Node(0); + private static Node list(final int... values) { + final var sentinel = new Node(0); var tail = sentinel; - for (var value : values) { + for (final var value : values) { tail.next = new Node(value); tail = tail.next; } return sentinel.next; } - private static List values(Node head) { - var values = new ArrayList(); + private static List values(final Node head) { + final var values = new ArrayList(); for (var node = head; node != null; node = node.next) { values.add(node.data); } diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/linkedlist/ReverseLinkedListTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/linkedlist/ReverseLinkedListTest.java index 9823b50..36a71c0 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/linkedlist/ReverseLinkedListTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/linkedlist/ReverseLinkedListTest.java @@ -17,11 +17,11 @@ */ class ReverseLinkedListTest { - static LinkedListNode solve(LinkedList list) { + static LinkedListNode solve(final LinkedList list) { LinkedListNode previous = null; var current = list.getFirst(); while (current != null) { - var next = current.getNext(); + final var next = current.getNext(); current.setNext(previous); previous = current; current = next; @@ -31,12 +31,12 @@ static LinkedListNode solve(LinkedList list) { @Test void reversesTheList() { - var list = new LinkedList(); + final var list = new LinkedList(); list.addAtEnd(new Element("a")); list.addAtEnd(new Element("b")); list.addAtEnd(new Element("c")); - var head = solve(list); + final var head = solve(list); assertThat(head.getElement().getName()).isEqualTo("c"); assertThat(head.getNext().getElement().getName()).isEqualTo("b"); diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/map/DroughtTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/map/DroughtTest.java index c881edf..499681e 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/map/DroughtTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/map/DroughtTest.java @@ -37,31 +37,31 @@ record Property(int residents, int consumption) {} */ record City(SortedMap residentsByConsumption, BigDecimal averageConsumption) {} - static City solve(List properties) { - var residentsByConsumption = new TreeMap(); + static City solve(final List properties) { + final var residentsByConsumption = new TreeMap(); var totalResidents = 0L; var totalConsumption = 0L; - for (var property : properties) { + for (final var property : properties) { totalResidents += property.residents(); totalConsumption += property.consumption(); residentsByConsumption.merge( property.consumption() / property.residents(), property.residents(), Integer::sum); } - var average = + final var average = BigDecimal.valueOf(totalConsumption).divide(BigDecimal.valueOf(totalResidents), 2, RoundingMode.DOWN); return new City(residentsByConsumption, average); } - static String run(InputStream in) throws IOException { - var reader = new Reader(in); - var cities = new ArrayList(); + static String run(final InputStream in) throws IOException { + final var reader = new Reader(in); + final var cities = new ArrayList(); for (var n = reader.nextInt(); n != 0; n = reader.nextInt()) { - var properties = new ArrayList(n); + final var properties = new ArrayList(n); for (var i = 0; i < n; i++) { properties.add(new Property(reader.nextInt(), reader.nextInt())); } - var city = solve(properties); - var groups = city.residentsByConsumption().entrySet().stream() + final var city = solve(properties); + final var groups = city.residentsByConsumption().entrySet().stream() .map(e -> e.getValue() + "-" + e.getKey()) .collect(Collectors.joining(" ")); cities.add(""" @@ -76,7 +76,7 @@ static String run(InputStream in) throws IOException { @Test void groupsResidentsByPerCapitaConsumption() { - var city = solve(List.of(new Property(3, 22), new Property(2, 11), new Property(3, 39))); + final var city = solve(List.of(new Property(3, 22), new Property(2, 11), new Property(3, 39))); assertThat(city.residentsByConsumption()).containsExactly(entry(5, 2), entry(7, 3), entry(13, 3)); assertThat(city.averageConsumption()).isEqualByComparingTo("9.00"); @@ -84,14 +84,14 @@ void groupsResidentsByPerCapitaConsumption() { @Test void mergesPropertiesWithSamePerCapitaConsumption() { - var city = solve(List.of(new Property(1, 10), new Property(2, 20), new Property(3, 30))); + final var city = solve(List.of(new Property(1, 10), new Property(2, 20), new Property(3, 30))); assertThat(city.residentsByConsumption()).containsExactly(entry(10, 6)); } @Test void truncatesAverageInsteadOfRounding() { - var city = solve(List.of( + final var city = solve(List.of( new Property(1, 25), new Property(2, 20), new Property(3, 31), @@ -104,7 +104,7 @@ void truncatesAverageInsteadOfRounding() { @Test void keepsTrailingZeroOfExactAverage() { - var city = solve(List.of(new Property(10, 156))); + final var city = solve(List.of(new Property(10, 156))); assertThat(city.averageConsumption().toPlainString()).isEqualTo("15.60"); assertThat(city.residentsByConsumption()).containsExactly(Map.entry(15, 10)); @@ -112,8 +112,8 @@ void keepsTrailingZeroOfExactAverage() { @ParameterizedTest @ValueSource(strings = {"uri", "udebug"}) - void matchesSample(String name) throws IOException { - var samples = new SampleLoader("problems/datastructure/map/drought"); + void matchesSample(final String name) throws IOException { + final var samples = new SampleLoader("problems/datastructure/map/drought"); assertThat(run(samples.loadAsInputStream(name + ".in"))).isEqualTo(samples.loadAsString(name + ".out")); } } diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/map/NumberFrequencyTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/map/NumberFrequencyTest.java index 8ef5617..08c5583 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/map/NumberFrequencyTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/map/NumberFrequencyTest.java @@ -22,21 +22,21 @@ */ class NumberFrequencyTest { - static SortedMap solve(int[] numbers) { - var frequency = new TreeMap(); - for (var x : numbers) { + static SortedMap solve(final int[] numbers) { + final var frequency = new TreeMap(); + for (final var x : numbers) { frequency.merge(x, 1, Integer::sum); } return frequency; } - static String run(InputStream in) throws IOException { - var reader = new Reader(in); - var numbers = new int[reader.nextInt()]; + static String run(final InputStream in) throws IOException { + final var reader = new Reader(in); + final var numbers = new int[reader.nextInt()]; for (var i = 0; i < numbers.length; i++) { numbers[i] = reader.nextInt(); } - var out = new StringBuilder(); + final var out = new StringBuilder(); solve(numbers) .forEach((x, count) -> out.append(x).append(" aparece ").append(count).append(" vez(es)\n")); @@ -61,8 +61,8 @@ void emptyInputHasNoFrequencies() { @ParameterizedTest @ValueSource(strings = {"uri", "udebug"}) - void matchesSample(String name) throws IOException { - var samples = new SampleLoader("problems/datastructure/map/number-frequency"); + void matchesSample(final String name) throws IOException { + final var samples = new SampleLoader("problems/datastructure/map/number-frequency"); assertThat(run(samples.loadAsInputStream(name + ".in"))).isEqualTo(samples.loadAsString(name + ".out")); } } diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/queue/QueueTwoStacksTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/queue/QueueTwoStacksTest.java index 407fa14..1b50c16 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/queue/QueueTwoStacksTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/queue/QueueTwoStacksTest.java @@ -23,7 +23,7 @@ static class QueueTwoStacks { private final Deque inStack = new ArrayDeque<>(); private final Deque outStack = new ArrayDeque<>(); - void enqueue(int item) { + void enqueue(final int item) { inStack.push(item); } @@ -42,14 +42,14 @@ int dequeue() { @Test void dequeueOnEmptyQueueFails() { - var queue = new QueueTwoStacks(); + final var queue = new QueueTwoStacks(); assertThatExceptionOfType(NoSuchElementException.class).isThrownBy(queue::dequeue); } @Test void dequeuesWhatWasEnqueued() { - var queue = new QueueTwoStacks(); + final var queue = new QueueTwoStacks(); queue.enqueue(1); assertThat(queue.dequeue()).isEqualTo(1); @@ -57,7 +57,7 @@ void dequeuesWhatWasEnqueued() { @Test void dequeuesInFirstInFirstOutOrder() { - var queue = new QueueTwoStacks(); + final var queue = new QueueTwoStacks(); queue.enqueue(3); queue.enqueue(1); queue.enqueue(4); @@ -69,7 +69,7 @@ void dequeuesInFirstInFirstOutOrder() { @Test void keepsOrderWhenEnqueuesAndDequeuesInterleave() { - var queue = new QueueTwoStacks(); + final var queue = new QueueTwoStacks(); queue.enqueue(1); queue.enqueue(2); assertThat(queue.dequeue()).isEqualTo(1); diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/set/InflightEntertainmentTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/set/InflightEntertainmentTest.java index a15ae82..004ea59 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/set/InflightEntertainmentTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/set/InflightEntertainmentTest.java @@ -15,9 +15,9 @@ */ class InflightEntertainmentTest { - static boolean solve(int[] movieLengths, int flightLength) { - var lengthsSeen = new HashSet(); - for (var firstLength : movieLengths) { + static boolean solve(final int[] movieLengths, final int flightLength) { + final var lengthsSeen = new HashSet(); + for (final var firstLength : movieLengths) { if (lengthsSeen.contains(flightLength - firstLength)) { return true; } diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/set/PermutationPalindromeTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/set/PermutationPalindromeTest.java index 807522e..e0e1689 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/set/PermutationPalindromeTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/set/PermutationPalindromeTest.java @@ -15,9 +15,9 @@ */ class PermutationPalindromeTest { - static boolean solve(String text) { - var unpaired = new HashSet(); - for (var c : text.toCharArray()) { + static boolean solve(final String text) { + final var unpaired = new HashSet(); + for (final var c : text.toCharArray()) { if (!unpaired.remove(c)) { unpaired.add(c); } diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/set/TwiceLinearTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/set/TwiceLinearTest.java index 5c3b4c7..779cee9 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/set/TwiceLinearTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/set/TwiceLinearTest.java @@ -16,11 +16,11 @@ */ class TwiceLinearTest { - static int solve(int n) { - var pending = new TreeSet(); + static int solve(final int n) { + final var pending = new TreeSet(); pending.add(1); for (var i = 0; i < n; i++) { - var x = pending.pollFirst(); + final var x = pending.pollFirst(); pending.add(2 * x + 1); pending.add(3 * x + 1); } diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/stack/BracketValidatorTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/stack/BracketValidatorTest.java index 8e3ec8c..a478d6c 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/stack/BracketValidatorTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/stack/BracketValidatorTest.java @@ -15,9 +15,9 @@ */ class BracketValidatorTest { - static boolean solve(String code) { - var openers = new ArrayDeque(); - for (var c : code.toCharArray()) { + static boolean solve(final String code) { + final var openers = new ArrayDeque(); + for (final var c : code.toCharArray()) { switch (c) { case '(', '[', '{' -> openers.push(c); case ')', ']', '}' -> { @@ -31,7 +31,7 @@ static boolean solve(String code) { return openers.isEmpty(); } - private static char closerFor(char opener) { + private static char closerFor(final char opener) { return switch (opener) { case '(' -> ')'; case '[' -> ']'; diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/stack/DiamondsAndSandTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/stack/DiamondsAndSandTest.java index f96021d..e3ab398 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/stack/DiamondsAndSandTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/stack/DiamondsAndSandTest.java @@ -20,10 +20,10 @@ */ class DiamondsAndSandTest { - static int solve(String mine) { + static int solve(final String mine) { var open = 0; var diamonds = 0; - for (var c : mine.toCharArray()) { + for (final var c : mine.toCharArray()) { if (c == '<') { open++; } else if (c == '>' && open > 0) { @@ -34,10 +34,10 @@ static int solve(String mine) { return diamonds; } - static String run(InputStream in) throws IOException { - var reader = new Reader(in); - var n = reader.nextInt(); - var out = new StringBuilder(); + static String run(final InputStream in) throws IOException { + final var reader = new Reader(in); + final var n = reader.nextInt(); + final var out = new StringBuilder(); for (var i = 0; i < n; i++) { out.append(solve(reader.readLine())).append('\n'); } @@ -64,8 +64,8 @@ void closingWithoutOpeningIsIgnored() { @ParameterizedTest @ValueSource(strings = {"uri", "udebug"}) - void matchesSample(String name) throws IOException { - var samples = new SampleLoader("problems/datastructure/stack/diamonds-and-sand"); + void matchesSample(final String name) throws IOException { + final var samples = new SampleLoader("problems/datastructure/stack/diamonds-and-sand"); assertThat(run(samples.loadAsInputStream(name + ".in"))).isEqualTo(samples.loadAsString(name + ".out")); } } diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/stack/LargestStackTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/stack/LargestStackTest.java index 8865c4d..987a9bd 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/stack/LargestStackTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/stack/LargestStackTest.java @@ -21,7 +21,7 @@ static class MaxStack { private final Deque stack = new ArrayDeque<>(); private final Deque maxesStack = new ArrayDeque<>(); - void push(int item) { + void push(final int item) { stack.push(item); if (maxesStack.isEmpty() || item >= maxesStack.peek()) { maxesStack.push(item); @@ -29,7 +29,7 @@ void push(int item) { } int pop() { - int item = stack.pop(); + final int item = stack.pop(); if (item == maxesStack.peek()) { maxesStack.pop(); } @@ -43,7 +43,7 @@ int getMax() { @Test void popsWhatWasPushed() { - var stack = new MaxStack(); + final var stack = new MaxStack(); stack.push(1); assertThat(stack.pop()).isEqualTo(1); @@ -51,7 +51,7 @@ void popsWhatWasPushed() { @Test void popsInLastInFirstOutOrder() { - var stack = new MaxStack(); + final var stack = new MaxStack(); stack.push(3); stack.push(1); stack.push(2); @@ -63,7 +63,7 @@ void popsInLastInFirstOutOrder() { @Test void getMaxReturnsTheLargestItem() { - var stack = new MaxStack(); + final var stack = new MaxStack(); stack.push(1); stack.push(10); stack.push(3); @@ -73,7 +73,7 @@ void getMaxReturnsTheLargestItem() { @Test void getMaxTracksPopsIncludingDuplicateMaxima() { - var stack = new MaxStack(); + final var stack = new MaxStack(); stack.push(5); stack.push(7); stack.push(7); diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/stack/ParenthesisBalanceTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/stack/ParenthesisBalanceTest.java index 7a335a8..cc805c0 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/stack/ParenthesisBalanceTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/stack/ParenthesisBalanceTest.java @@ -21,9 +21,9 @@ */ class ParenthesisBalanceTest { - static boolean solve(String expression) { + static boolean solve(final String expression) { var depth = 0; - for (var c : expression.toCharArray()) { + for (final var c : expression.toCharArray()) { switch (c) { case '(' -> depth++; case ')' -> { @@ -37,9 +37,9 @@ static boolean solve(String expression) { return depth == 0; } - static String run(InputStream in) throws IOException { - var reader = new Reader(in); - var out = new StringBuilder(); + static String run(final InputStream in) throws IOException { + final var reader = new Reader(in); + final var out = new StringBuilder(); try { for (var line = reader.readLine(); !line.isEmpty(); line = reader.readLine()) { out.append(solve(line) ? "correct" : "incorrect").append('\n'); @@ -77,8 +77,8 @@ void closingBeforeOpeningIsIncorrect() { @ParameterizedTest @ValueSource(strings = {"uri", "udebug"}) - void matchesSample(String name) throws IOException { - var samples = new SampleLoader("problems/datastructure/stack/parenthesis-balance"); + void matchesSample(final String name) throws IOException { + final var samples = new SampleLoader("problems/datastructure/stack/parenthesis-balance"); assertThat(run(samples.loadAsInputStream(name + ".in"))).isEqualTo(samples.loadAsString(name + ".out")); } } diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/tree/BalancedBinaryTreeTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/tree/BalancedBinaryTreeTest.java index b8be54c..98fb731 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/tree/BalancedBinaryTreeTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/tree/BalancedBinaryTreeTest.java @@ -19,18 +19,18 @@ class BalancedBinaryTreeTest { private record NodeDepth(BinaryTreeNode node, int depth) {} - static boolean solve(BinaryTreeNode root) { + static boolean solve(final BinaryTreeNode root) { if (root == null) { return true; } - var depths = new ArrayList(3); - var nodes = new ArrayDeque(); + final var depths = new ArrayList(3); + final var nodes = new ArrayDeque(); nodes.push(new NodeDepth(root, 0)); while (!nodes.isEmpty()) { - var current = nodes.pop(); - var node = current.node(); - var depth = current.depth(); + final var current = nodes.pop(); + final var node = current.node(); + final var depth = current.depth(); if (node.left == null && node.right == null) { if (!depths.contains(depth)) { @@ -63,8 +63,8 @@ void singleNodeIsSuperBalanced() { @Test void leavesTwoLevelsApartAreNotSuperBalanced() { - var root = new BinaryTreeNode(5); - var three = root.insertLeft(3); + final var root = new BinaryTreeNode(5); + final var three = root.insertLeft(3); three.insertLeft(1); three.insertRight(4).insertLeft(2); root.insertRight(8); @@ -74,8 +74,8 @@ void leavesTwoLevelsApartAreNotSuperBalanced() { @Test void leavesAtMostOneLevelApartAreSuperBalanced() { - var root = new BinaryTreeNode(5); - var three = root.insertLeft(3); + final var root = new BinaryTreeNode(5); + final var three = root.insertLeft(3); three.insertLeft(1); three.insertRight(4).insertLeft(2); root.insertRight(8).insertLeft(6); diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/tree/BinarySearchTreeCheckerTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/tree/BinarySearchTreeCheckerTest.java index 7f3cdbe..edfa9b1 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/tree/BinarySearchTreeCheckerTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/tree/BinarySearchTreeCheckerTest.java @@ -18,16 +18,16 @@ class BinarySearchTreeCheckerTest { private record NodeBounds(BinaryTreeNode node, long lower, long upper) {} - static boolean solve(BinaryTreeNode root) { + static boolean solve(final BinaryTreeNode root) { if (root == null) { return true; } - var stack = new ArrayDeque(); + final var stack = new ArrayDeque(); stack.push(new NodeBounds(root, Long.MIN_VALUE, Long.MAX_VALUE)); while (!stack.isEmpty()) { - var current = stack.pop(); - var node = current.node(); + final var current = stack.pop(); + final var node = current.node(); if (node.value <= current.lower() || node.value >= current.upper()) { return false; } @@ -43,11 +43,11 @@ static boolean solve(BinaryTreeNode root) { @Test void descendantViolatingAncestorBoundIsNotABst() { - var root = new BinaryTreeNode(50); - var eighty = root.insertRight(80); + final var root = new BinaryTreeNode(50); + final var eighty = root.insertRight(80); eighty.insertRight(90); eighty.insertLeft(70); - var thirty = root.insertLeft(30); + final var thirty = root.insertLeft(30); thirty.insertRight(60); thirty.insertLeft(20); @@ -56,11 +56,11 @@ void descendantViolatingAncestorBoundIsNotABst() { @Test void validTreeIsABst() { - var root = new BinaryTreeNode(50); - var eighty = root.insertRight(80); + final var root = new BinaryTreeNode(50); + final var eighty = root.insertRight(80); eighty.insertRight(90); eighty.insertLeft(70); - var thirty = root.insertLeft(30); + final var thirty = root.insertLeft(30); thirty.insertRight(40); thirty.insertLeft(20); @@ -69,7 +69,7 @@ void validTreeIsABst() { @Test void duplicateValueIsNotABst() { - var root = new BinaryTreeNode(5); + final var root = new BinaryTreeNode(5); root.insertLeft(5); assertThat(solve(root)).isFalse(); @@ -77,7 +77,7 @@ void duplicateValueIsNotABst() { @Test void extremeIntValuesAreAllowed() { - var root = new BinaryTreeNode(0); + final var root = new BinaryTreeNode(0); root.insertLeft(Integer.MIN_VALUE); root.insertRight(Integer.MAX_VALUE); diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/tree/SecondLargestItemInBstTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/tree/SecondLargestItemInBstTest.java index f202912..1e02434 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/tree/SecondLargestItemInBstTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/tree/SecondLargestItemInBstTest.java @@ -16,7 +16,7 @@ */ class SecondLargestItemInBstTest { - static int solve(BinaryTreeNode root) { + static int solve(final BinaryTreeNode root) { if (root == null || (root.left == null && root.right == null)) { throw new IllegalArgumentException("Tree must have at least 2 nodes"); } @@ -32,7 +32,7 @@ static int solve(BinaryTreeNode root) { } } - private static int largest(BinaryTreeNode node) { + private static int largest(final BinaryTreeNode node) { var current = node; while (current.right != null) { current = current.right; @@ -42,13 +42,13 @@ private static int largest(BinaryTreeNode node) { @Test void largestHasALeftSubtree() { - var root = new BinaryTreeNode(5); - var three = root.insertLeft(3); + final var root = new BinaryTreeNode(5); + final var three = root.insertLeft(3); three.insertLeft(1); three.insertRight(4); - var eight = root.insertRight(8); + final var eight = root.insertRight(8); eight.insertLeft(7); - var ten = eight.insertRight(12).insertLeft(10); + final var ten = eight.insertRight(12).insertLeft(10); ten.insertLeft(9); ten.insertRight(11); @@ -57,7 +57,7 @@ void largestHasALeftSubtree() { @Test void parentOfChildlessLargest() { - var root = new BinaryTreeNode(5); + final var root = new BinaryTreeNode(5); root.insertLeft(3); root.insertRight(8); @@ -66,7 +66,7 @@ void parentOfChildlessLargest() { @Test void rootIsLargestWithOnlyLeftSubtree() { - var root = new BinaryTreeNode(5); + final var root = new BinaryTreeNode(5); root.insertLeft(3).insertRight(4); assertThat(solve(root)).isEqualTo(4); diff --git a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/trie/MillionGazillionTest.java b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/trie/MillionGazillionTest.java index f631e2b..5a7140d 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/datastructure/trie/MillionGazillionTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/datastructure/trie/MillionGazillionTest.java @@ -23,10 +23,10 @@ static class Trie { private final Node root = new Node(); /** Adds {@code word} and returns {@code true} if it was not already present. */ - boolean checkPresentAndAdd(String word) { + boolean checkPresentAndAdd(final String word) { var current = root; var isNewWord = false; - for (var character : word.toCharArray()) { + for (final var character : word.toCharArray()) { if (!current.children.containsKey(character)) { isNewWord = true; } diff --git a/src/test/java/io/github/diegourban/algorithms/problems/dp/CakeThiefTest.java b/src/test/java/io/github/diegourban/algorithms/problems/dp/CakeThiefTest.java index c76c087..110d9ad 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/dp/CakeThiefTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/dp/CakeThiefTest.java @@ -24,16 +24,16 @@ static class InfinityException extends RuntimeException { } } - static long solve(Box[] boxes, int capacity) { - var maxValuesAtCapacities = new long[capacity + 1]; + static long solve(final Box[] boxes, final int capacity) { + final var maxValuesAtCapacities = new long[capacity + 1]; for (var currentCapacity = 0; currentCapacity <= capacity; currentCapacity++) { var currentMaxValue = 0L; - for (var box : boxes) { + for (final var box : boxes) { if (box.weight() == 0 && box.value() != 0) { throw new InfinityException(); } if (box.weight() <= currentCapacity) { - var maxValueUsingBox = box.value() + maxValuesAtCapacities[currentCapacity - box.weight()]; + final var maxValueUsingBox = box.value() + maxValuesAtCapacities[currentCapacity - box.weight()]; currentMaxValue = Math.max(maxValueUsingBox, currentMaxValue); } } @@ -44,14 +44,14 @@ static long solve(Box[] boxes, int capacity) { @Test void takesAsManyOfTheBestBoxesAsFit() { - var boxes = new Box[] {new Box(1, 3), new Box(2, 2), new Box(4, 5)}; + final var boxes = new Box[] {new Box(1, 3), new Box(2, 2), new Box(4, 5)}; assertThat(solve(boxes, 15)).isEqualTo(45L); } @Test void weightlessValuableBoxIsInfinite() { - var boxes = new Box[] {new Box(0, 1), new Box(2, 2)}; + final var boxes = new Box[] {new Box(0, 1), new Box(2, 2)}; assertThatExceptionOfType(InfinityException.class).isThrownBy(() -> solve(boxes, 5)); } diff --git a/src/test/java/io/github/diegourban/algorithms/problems/greedy/BanknotesAndCoinsTest.java b/src/test/java/io/github/diegourban/algorithms/problems/greedy/BanknotesAndCoinsTest.java index c5a5236..852b15c 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/greedy/BanknotesAndCoinsTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/greedy/BanknotesAndCoinsTest.java @@ -24,20 +24,21 @@ class BanknotesAndCoinsTest { /** Counts per denomination, aligned with {@link #BANKNOTE_CENTS} and {@link #COIN_CENTS}. */ record Breakdown(List banknotes, List coins) {} - static int toCents(String amount) { + static int toCents(final String amount) { return new BigDecimal(amount).movePointRight(2).intValueExact(); } - static Breakdown solve(int cents) { - var remaining = new int[] {cents}; - var banknotes = + static Breakdown solve(final int cents) { + final var remaining = new int[] {cents}; + final var banknotes = BANKNOTE_CENTS.stream().map(value -> take(remaining, value)).toList(); - var coins = COIN_CENTS.stream().map(value -> take(remaining, value)).toList(); + final var coins = + COIN_CENTS.stream().map(value -> take(remaining, value)).toList(); return new Breakdown(banknotes, coins); } - private static int take(int[] remaining, int value) { - var count = remaining[0] / value; + private static int take(final int[] remaining, final int value) { + final var count = remaining[0] / value; remaining[0] %= value; return count; } @@ -50,7 +51,7 @@ private static int take(int[] remaining, int value) { "0.01, 1", "1000000.00, 100000000", }) - void parsesAmountToCentsExactly(String amount, int cents) { + void parsesAmountToCentsExactly(final String amount, final int cents) { assertThat(toCents(amount)).isEqualTo(cents); } diff --git a/src/test/java/io/github/diegourban/algorithms/problems/math/CollectableCardsTest.java b/src/test/java/io/github/diegourban/algorithms/problems/math/CollectableCardsTest.java index 1ec7fc2..3e9db4b 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/math/CollectableCardsTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/math/CollectableCardsTest.java @@ -23,14 +23,14 @@ class CollectableCardsTest { private static final SampleLoader SAMPLES = new SampleLoader("problems/math/collectable-cards"); - static long solve(int f1, int f2) { + static long solve(final int f1, final int f2) { return NumberTheory.gcdLoop(f1, f2); } - static String run(InputStream in) throws IOException { - var reader = new Reader(in); - var tests = reader.nextInt(); - var out = new StringBuilder(); + static String run(final InputStream in) throws IOException { + final var reader = new Reader(in); + final var tests = reader.nextInt(); + final var out = new StringBuilder(); for (var i = 0; i < tests; i++) { out.append(solve(reader.nextInt(), reader.nextInt())).append('\n'); } @@ -46,13 +46,13 @@ static String run(InputStream in) throws IOException { "7, 13, 1", "1000, 1000, 1000", }) - void largestPileSizeIsTheGcd(int f1, int f2, long expected) { + void largestPileSizeIsTheGcd(final int f1, final int f2, final long expected) { assertThat(solve(f1, f2)).isEqualTo(expected); } @ParameterizedTest @ValueSource(strings = {"uri", "udebug"}) - void matchesSample(String name) throws IOException { + void matchesSample(final String name) throws IOException { assertThat(run(SAMPLES.loadAsInputStream(name + ".in"))).isEqualTo(SAMPLES.loadAsString(name + ".out")); } } diff --git a/src/test/java/io/github/diegourban/algorithms/problems/math/CommonDenominatorsTest.java b/src/test/java/io/github/diegourban/algorithms/problems/math/CommonDenominatorsTest.java index 0935916..1ad906a 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/math/CommonDenominatorsTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/math/CommonDenominatorsTest.java @@ -16,13 +16,14 @@ */ class CommonDenominatorsTest { - static String solve(long[][] fractions) { + static String solve(final long[][] fractions) { if (fractions.length == 0) { return ""; } - var lcm = NumberTheory.lcm(Arrays.stream(fractions).mapToLong(f -> f[1]).toArray()); - var result = new StringBuilder(); - for (var f : fractions) { + final var lcm = + NumberTheory.lcm(Arrays.stream(fractions).mapToLong(f -> f[1]).toArray()); + final var result = new StringBuilder(); + for (final var f : fractions) { result.append('(') .append(f[0] * (lcm / f[1])) .append(',') diff --git a/src/test/java/io/github/diegourban/algorithms/problems/math/DivisorsTest.java b/src/test/java/io/github/diegourban/algorithms/problems/math/DivisorsTest.java index 5bf783c..0ccde24 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/math/DivisorsTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/math/DivisorsTest.java @@ -16,9 +16,9 @@ */ class DivisorsTest { - static List solve(int n) { - var small = new ArrayList(); - var large = new ArrayList(); + static List solve(final int n) { + final var small = new ArrayList(); + final var large = new ArrayList(); for (var d = 1; (long) d * d <= n; d++) { if (n % d == 0) { small.add(d); diff --git a/src/test/java/io/github/diegourban/algorithms/problems/math/EasyLineTest.java b/src/test/java/io/github/diegourban/algorithms/problems/math/EasyLineTest.java index 0d4fb8f..aef09f7 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/math/EasyLineTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/math/EasyLineTest.java @@ -15,7 +15,7 @@ */ class EasyLineTest { - static BigInteger solve(int n) { + static BigInteger solve(final int n) { return Combinatorics.binomialCoefficient(2 * n, n); } @@ -34,7 +34,7 @@ static BigInteger solve(int n) { "19, 35345263800", "50, 100891344545564193334812497256", }) - void sumsSquaresOfPascalRow(int n, BigInteger expected) { + void sumsSquaresOfPascalRow(final int n, final BigInteger expected) { assertThat(solve(n)).isEqualTo(expected); } } diff --git a/src/test/java/io/github/diegourban/algorithms/problems/math/FactorialSumTest.java b/src/test/java/io/github/diegourban/algorithms/problems/math/FactorialSumTest.java index 3c328ed..bbbfdcf 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/math/FactorialSumTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/math/FactorialSumTest.java @@ -23,11 +23,11 @@ class FactorialSumTest { private static final SampleLoader SAMPLES = new SampleLoader("problems/math/factorial-sum"); - static long solve(int m, int n) { + static long solve(final int m, final int n) { return factorial(m) + factorial(n); } - private static long factorial(int n) { + private static long factorial(final int n) { var result = 1L; for (var i = 2; i <= n; i++) { result *= i; @@ -35,9 +35,9 @@ private static long factorial(int n) { return result; } - static String run(InputStream in) throws IOException { - var reader = new Reader(in); - var out = new StringBuilder(); + static String run(final InputStream in) throws IOException { + final var reader = new Reader(in); + final var out = new StringBuilder(); while (true) { try { out.append(solve(reader.nextInt(), reader.nextInt())).append('\n'); @@ -56,13 +56,13 @@ static String run(InputStream in) throws IOException { "5, 0, 121", "20, 20, 4865804016353280000", }) - void sumsBothFactorials(int m, int n, long expected) { + void sumsBothFactorials(final int m, final int n, final long expected) { assertThat(solve(m, n)).isEqualTo(expected); } @ParameterizedTest @ValueSource(strings = {"uri", "udebug"}) - void matchesSample(String name) throws IOException { + void matchesSample(final String name) throws IOException { assertThat(run(SAMPLES.loadAsInputStream(name + ".in"))).isEqualTo(SAMPLES.loadAsString(name + ".out")); } } diff --git a/src/test/java/io/github/diegourban/algorithms/problems/math/FibonacciArrayTest.java b/src/test/java/io/github/diegourban/algorithms/problems/math/FibonacciArrayTest.java index 7fd14da..9004c44 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/math/FibonacciArrayTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/math/FibonacciArrayTest.java @@ -15,11 +15,11 @@ */ class FibonacciArrayTest { - static long solve(int n) { + static long solve(final int n) { var previous = 0L; var current = 1L; for (var i = 0; i < n; i++) { - var next = previous + current; + final var next = previous + current; previous = current; current = next; } @@ -37,7 +37,7 @@ static long solve(int n) { "47, 2971215073", "60, 1548008755920", }) - void nthFibonacci(int n, long expected) { + void nthFibonacci(final int n, final long expected) { assertThat(solve(n)).isEqualTo(expected); } } diff --git a/src/test/java/io/github/diegourban/algorithms/problems/math/PascalsTriangleTest.java b/src/test/java/io/github/diegourban/algorithms/problems/math/PascalsTriangleTest.java index 18cf34c..2042b51 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/math/PascalsTriangleTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/math/PascalsTriangleTest.java @@ -18,7 +18,7 @@ */ class PascalsTriangleTest { - static long solve(int n) { + static long solve(final int n) { return (1L << n) - 1; } @@ -30,14 +30,14 @@ static long solve(int n) { "31, 2147483647", "50, 1125899906842623", }) - void sumOfFirstRows(int n, long expected) { + void sumOfFirstRows(final int n, final long expected) { assertThat(solve(n)).isEqualTo(expected); } @Test void closedFormMatchesSummingTheBinomialCoefficients() { for (var n = 1; n <= 20; n++) { - var sum = IntStream.range(0, n) + final var sum = IntStream.range(0, n) .boxed() .flatMap(row -> IntStream.rangeClosed(0, row).mapToObj(k -> Combinatorics.binomialCoefficient(row, k))) diff --git a/src/test/java/io/github/diegourban/algorithms/problems/math/PerfectNumberTest.java b/src/test/java/io/github/diegourban/algorithms/problems/math/PerfectNumberTest.java index a592201..fac54af 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/math/PerfectNumberTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/math/PerfectNumberTest.java @@ -15,7 +15,7 @@ */ class PerfectNumberTest { - static boolean solve(int x) { + static boolean solve(final int x) { if (x < 2) { return false; } @@ -33,13 +33,13 @@ static boolean solve(int x) { @ParameterizedTest @ValueSource(ints = {6, 28, 496, 8128, 33550336}) - void perfectNumbers(int x) { + void perfectNumbers(final int x) { assertThat(solve(x)).isTrue(); } @ParameterizedTest @ValueSource(ints = {1, 2, 29, 50, 91, 100000000}) - void nonPerfectNumbers(int x) { + void nonPerfectNumbers(final int x) { assertThat(solve(x)).isFalse(); } } diff --git a/src/test/java/io/github/diegourban/algorithms/problems/math/PrefaceTest.java b/src/test/java/io/github/diegourban/algorithms/problems/math/PrefaceTest.java index 67cdda0..d5d2a70 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/math/PrefaceTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/math/PrefaceTest.java @@ -19,11 +19,11 @@ class PrefaceTest { record Division(int quotient, int remainder) {} - static Division solve(int a, int b) { + static Division solve(final int a, final int b) { if (b == 0) { throw new IllegalArgumentException("division by zero"); } - var remainder = Math.floorMod(a, Math.abs(b)); + final var remainder = Math.floorMod(a, Math.abs(b)); return new Division((a - remainder) / b, remainder); } @@ -38,7 +38,7 @@ static Division solve(int a, int b) { "-6, 3, -2, 0", "0, -5, 0, 0", }) - void remainderIsNeverNegative(int a, int b, int quotient, int remainder) { + void remainderIsNeverNegative(final int a, final int b, final int quotient, final int remainder) { assertThat(solve(a, b)).isEqualTo(new Division(quotient, remainder)); } diff --git a/src/test/java/io/github/diegourban/algorithms/problems/math/PrimeGeneratorTest.java b/src/test/java/io/github/diegourban/algorithms/problems/math/PrimeGeneratorTest.java index 198d9d6..2d2c049 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/math/PrimeGeneratorTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/math/PrimeGeneratorTest.java @@ -22,15 +22,15 @@ */ class PrimeGeneratorTest { - static List solve(int m, int n) { - var low = Math.max(m, 2); - var primes = new ArrayList(); + static List solve(final int m, final int n) { + final var low = Math.max(m, 2); + final var primes = new ArrayList(); if (low > n) { return primes; } - var limit = (int) Math.sqrt(n); - var composite = new boolean[limit + 1]; - var segment = new boolean[n - low + 1]; + final var limit = (int) Math.sqrt(n); + final var composite = new boolean[limit + 1]; + final var segment = new boolean[n - low + 1]; for (var p = 2; p <= limit; p++) { if (composite[p]) { continue; @@ -38,7 +38,7 @@ static List solve(int m, int n) { for (var multiple = (long) p * p; multiple <= limit; multiple += p) { composite[(int) multiple] = true; } - var first = Math.max((long) p * p, (low + p - 1L) / p * p); + final var first = Math.max((long) p * p, (low + p - 1L) / p * p); for (var multiple = first; multiple <= n; multiple += p) { segment[(int) (multiple - low)] = true; } @@ -51,15 +51,15 @@ static List solve(int m, int n) { return primes; } - static String run(InputStream in) throws IOException { - var reader = new Reader(in); - var t = reader.nextInt(); - var out = new StringBuilder(); + static String run(final InputStream in) throws IOException { + final var reader = new Reader(in); + final var t = reader.nextInt(); + final var out = new StringBuilder(); for (var i = 0; i < t; i++) { if (i > 0) { out.append('\n'); } - for (var prime : solve(reader.nextInt(), reader.nextInt())) { + for (final var prime : solve(reader.nextInt(), reader.nextInt())) { out.append(prime).append('\n'); } } @@ -68,7 +68,7 @@ static String run(InputStream in) throws IOException { private final SampleLoader samples = new SampleLoader("problems/math/prime-generator"); - private static InputStream input(String text) { + private static InputStream input(final String text) { return new ByteArrayInputStream(text.getBytes(StandardCharsets.UTF_8)); } diff --git a/src/test/java/io/github/diegourban/algorithms/problems/math/PrimeNumberTest.java b/src/test/java/io/github/diegourban/algorithms/problems/math/PrimeNumberTest.java index f56cdce..90610c0 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/math/PrimeNumberTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/math/PrimeNumberTest.java @@ -15,19 +15,19 @@ */ class PrimeNumberTest { - static boolean solve(int x) { + static boolean solve(final int x) { return NumberTheory.isPrime(x); } @ParameterizedTest @ValueSource(ints = {2, 3, 5, 7, 11, 13, 97, 7919, 9999991}) - void primes(int x) { + void primes(final int x) { assertThat(solve(x)).isTrue(); } @ParameterizedTest @ValueSource(ints = {1, 4, 8, 9, 25, 49, 51, 7917, 10000000}) - void nonPrimes(int x) { + void nonPrimes(final int x) { assertThat(solve(x)).isFalse(); } } diff --git a/src/test/java/io/github/diegourban/algorithms/problems/math/PrimesInNumbersTest.java b/src/test/java/io/github/diegourban/algorithms/problems/math/PrimesInNumbersTest.java index af543b0..b46086a 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/math/PrimesInNumbersTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/math/PrimesInNumbersTest.java @@ -17,10 +17,10 @@ */ class PrimesInNumbersTest { - static String solve(int n) { - var counts = NumberTheory.primeFactorsList(n).stream() + static String solve(final int n) { + final var counts = NumberTheory.primeFactorsList(n).stream() .collect(Collectors.groupingBy(Function.identity(), TreeMap::new, Collectors.counting())); - var result = new StringBuilder(); + final var result = new StringBuilder(); counts.forEach((prime, k) -> { result.append('(').append(prime); if (k > 1) { @@ -48,7 +48,7 @@ static String solve(int n) { "86240, (2**5)(5)(7**2)(11)", "7775460, (2**2)(3**3)(5)(7)(11**2)(17)", }) - void decomposesIntoPrimePowers(int n, String expected) { + void decomposesIntoPrimePowers(final int n, final String expected) { assertThat(solve(n)).isEqualTo(expected); } } diff --git a/src/test/java/io/github/diegourban/algorithms/problems/math/QueenTest.java b/src/test/java/io/github/diegourban/algorithms/problems/math/QueenTest.java index 3b1d553..221af8c 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/math/QueenTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/math/QueenTest.java @@ -22,7 +22,7 @@ class QueenTest { private static final SampleLoader SAMPLES = new SampleLoader("problems/math/queen"); - static int solve(int x1, int y1, int x2, int y2) { + static int solve(final int x1, final int y1, final int x2, final int y2) { if (x1 == x2 && y1 == y2) { return 0; } @@ -32,14 +32,14 @@ static int solve(int x1, int y1, int x2, int y2) { return 2; } - static String run(InputStream in) throws IOException { - var reader = new Reader(in); - var out = new StringBuilder(); + static String run(final InputStream in) throws IOException { + final var reader = new Reader(in); + final var out = new StringBuilder(); while (true) { - var x1 = reader.nextInt(); - var y1 = reader.nextInt(); - var x2 = reader.nextInt(); - var y2 = reader.nextInt(); + final var x1 = reader.nextInt(); + final var y1 = reader.nextInt(); + final var x2 = reader.nextInt(); + final var y2 = reader.nextInt(); if (x1 == 0 && y1 == 0 && x2 == 0 && y2 == 0) { return out.toString(); } @@ -58,13 +58,13 @@ static String run(InputStream in) throws IOException { "1, 8, 8, 1, 1", "1, 1, 2, 3, 2", }) - void minimumMoves(int x1, int y1, int x2, int y2, int expected) { + void minimumMoves(final int x1, final int y1, final int x2, final int y2, final int expected) { assertThat(solve(x1, y1, x2, y2)).isEqualTo(expected); } @ParameterizedTest @ValueSource(strings = {"uri", "udebug"}) - void matchesSample(String name) throws IOException { + void matchesSample(final String name) throws IOException { assertThat(run(SAMPLES.loadAsInputStream(name + ".in"))).isEqualTo(SAMPLES.loadAsString(name + ".out")); } } diff --git a/src/test/java/io/github/diegourban/algorithms/problems/math/RainfallTest.java b/src/test/java/io/github/diegourban/algorithms/problems/math/RainfallTest.java index 5564bd5..423b847 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/math/RainfallTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/math/RainfallTest.java @@ -19,16 +19,17 @@ record Rainfall(double mean, double variance) {} static final Rainfall UNKNOWN = new Rainfall(-1, -1); - static Rainfall solve(String town, String data) { + static Rainfall solve(final String town, final String data) { return data.lines() .filter(line -> line.startsWith(town + ":")) .findFirst() .map(line -> { - var values = Arrays.stream(line.substring(town.length() + 1).split(",")) + final var values = Arrays.stream( + line.substring(town.length() + 1).split(",")) .mapToDouble(month -> Double.parseDouble(month.split(" ")[1])) .toArray(); - var mean = Statistics.mean(values); - var variance = Arrays.stream(values) + final var mean = Statistics.mean(values); + final var variance = Arrays.stream(values) .map(v -> (v - mean) * (v - mean)) .average() .orElseThrow(); @@ -51,14 +52,14 @@ static Rainfall solve(String town, String data) { @Test void london() { - var result = solve("London", DATA); + final var result = solve("London", DATA); assertThat(result.mean()).isCloseTo(51.199999999999996, within(1e-2)); assertThat(result.variance()).isCloseTo(57.42833333333374, within(1e-2)); } @Test void beijing() { - var result = solve("Beijing", DATA); + final var result = solve("Beijing", DATA); assertThat(result.mean()).isCloseTo(52.416666666666664, within(1e-2)); assertThat(result.variance()).isCloseTo(4808.37138888889, within(1e-2)); } diff --git a/src/test/java/io/github/diegourban/algorithms/problems/math/RectangularLoveTest.java b/src/test/java/io/github/diegourban/algorithms/problems/math/RectangularLoveTest.java index d32445a..4909dd5 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/math/RectangularLoveTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/math/RectangularLoveTest.java @@ -21,18 +21,19 @@ private record RangeOverlap(int startPoint, int length) {} private static final Rectangle NO_OVERLAP = new Rectangle(0, 0, 0, 0); - static Rectangle solve(Rectangle rect1, Rectangle rect2) { - var xOverlap = findRangeOverlap(rect1.leftX(), rect1.width(), rect2.leftX(), rect2.width()); - var yOverlap = findRangeOverlap(rect1.bottomY(), rect1.height(), rect2.bottomY(), rect2.height()); + static Rectangle solve(final Rectangle rect1, final Rectangle rect2) { + final var xOverlap = findRangeOverlap(rect1.leftX(), rect1.width(), rect2.leftX(), rect2.width()); + final var yOverlap = findRangeOverlap(rect1.bottomY(), rect1.height(), rect2.bottomY(), rect2.height()); if (xOverlap.length() == 0 || yOverlap.length() == 0) { return NO_OVERLAP; } return new Rectangle(xOverlap.startPoint(), yOverlap.startPoint(), xOverlap.length(), yOverlap.length()); } - private static RangeOverlap findRangeOverlap(int point1, int length1, int point2, int length2) { - var highestStartPoint = Math.max(point1, point2); - var lowestEndPoint = Math.min(point1 + length1, point2 + length2); + private static RangeOverlap findRangeOverlap( + final int point1, final int length1, final int point2, final int length2) { + final var highestStartPoint = Math.max(point1, point2); + final var lowestEndPoint = Math.min(point1 + length1, point2 + length2); if (highestStartPoint >= lowestEndPoint) { return new RangeOverlap(0, 0); } diff --git a/src/test/java/io/github/diegourban/algorithms/problems/math/RomanNumeralsTest.java b/src/test/java/io/github/diegourban/algorithms/problems/math/RomanNumeralsTest.java index 1ede0f1..78cc72c 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/math/RomanNumeralsTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/math/RomanNumeralsTest.java @@ -18,8 +18,8 @@ class RomanNumeralsTest { private static final int[] VALUES = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}; private static final String[] SYMBOLS = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"}; - static String solve(int n) { - var roman = new StringBuilder(); + static String solve(final int n) { + final var roman = new StringBuilder(); var remaining = n; for (var i = 0; i < VALUES.length; i++) { while (remaining >= VALUES[i]) { @@ -45,7 +45,7 @@ static String solve(int n) { "444, CDXLIV", "999, CMXCIX", }) - void convertsToRoman(int n, String expected) { + void convertsToRoman(final int n, final String expected) { assertThat(solve(n)).isEqualTo(expected); } } diff --git a/src/test/java/io/github/diegourban/algorithms/problems/math/SumByFactorsTest.java b/src/test/java/io/github/diegourban/algorithms/problems/math/SumByFactorsTest.java index 55906b2..b0af258 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/math/SumByFactorsTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/math/SumByFactorsTest.java @@ -16,14 +16,14 @@ */ class SumByFactorsTest { - static String solve(int[] numbers) { - var sums = new TreeMap(); - for (var number : numbers) { - for (var prime : NumberTheory.primeFactorsSet(Math.abs(number))) { + static String solve(final int[] numbers) { + final var sums = new TreeMap(); + for (final var number : numbers) { + for (final var prime : NumberTheory.primeFactorsSet(Math.abs(number))) { sums.merge(prime, number, Integer::sum); } } - var result = new StringBuilder(); + final var result = new StringBuilder(); sums.forEach((prime, sum) -> result.append('(').append(prime).append(' ').append(sum).append(')')); return result.toString(); diff --git a/src/test/java/io/github/diegourban/algorithms/problems/math/TdaRationalTest.java b/src/test/java/io/github/diegourban/algorithms/problems/math/TdaRationalTest.java index 659f2ab..834a491 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/math/TdaRationalTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/math/TdaRationalTest.java @@ -20,8 +20,8 @@ record Fraction(int numerator, int denominator) {} record Result(Fraction raw, Fraction simplified) {} - static Result solve(Fraction a, char operator, Fraction b) { - var raw = switch (operator) { + static Result solve(final Fraction a, final char operator, final Fraction b) { + final var raw = switch (operator) { case '+' -> new Fraction( a.numerator() * b.denominator() + b.numerator() * a.denominator(), @@ -34,11 +34,12 @@ static Result solve(Fraction a, char operator, Fraction b) { case '/' -> new Fraction(a.numerator() * b.denominator(), b.numerator() * a.denominator()); default -> throw new IllegalArgumentException("Invalid operator: " + operator); }; - var gcd = (int) NumberTheory.gcdLoop(Math.abs(raw.numerator()), Math.abs(raw.denominator())); + final var gcd = (int) NumberTheory.gcdLoop(Math.abs(raw.numerator()), Math.abs(raw.denominator())); return new Result(raw, new Fraction(raw.numerator() / gcd, raw.denominator() / gcd)); } - private static Result result(int rawNumerator, int rawDenominator, int numerator, int denominator) { + private static Result result( + final int rawNumerator, final int rawDenominator, final int numerator, final int denominator) { return new Result(new Fraction(rawNumerator, rawDenominator), new Fraction(numerator, denominator)); } diff --git a/src/test/java/io/github/diegourban/algorithms/problems/math/TripleDoubleTest.java b/src/test/java/io/github/diegourban/algorithms/problems/math/TripleDoubleTest.java index dbe8e47..6dcdb19 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/math/TripleDoubleTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/math/TripleDoubleTest.java @@ -17,9 +17,9 @@ */ class TripleDoubleTest { - static int solve(long num1, long num2) { - var a = Long.toString(num1); - var b = Long.toString(num2); + static int solve(final long num1, final long num2) { + final var a = Long.toString(num1); + final var b = Long.toString(num2); return IntStream.rangeClosed(0, 9) .mapToObj(Integer::toString) .anyMatch(d -> a.contains(d.repeat(3)) && b.contains(d.repeat(2))) @@ -37,7 +37,7 @@ static int solve(long num1, long num2) { "111, 22, 0", "1112, 122, 0", }) - void requiresTripleAndDoubleOfTheSameDigit(long num1, long num2, int expected) { + void requiresTripleAndDoubleOfTheSameDigit(final long num1, final long num2, final int expected) { assertThat(solve(num1, num2)).isEqualTo(expected); } } diff --git a/src/test/java/io/github/diegourban/algorithms/problems/recursion/CollatzConjectureTest.java b/src/test/java/io/github/diegourban/algorithms/problems/recursion/CollatzConjectureTest.java index 42df6b3..d9d0daa 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/recursion/CollatzConjectureTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/recursion/CollatzConjectureTest.java @@ -13,7 +13,7 @@ */ class CollatzConjectureTest { - static long solve(long x) { + static long solve(final long x) { if (x == 1) { return 1; } @@ -24,7 +24,7 @@ static long solve(long x) { @CsvSource({ "1, 1", "2, 2", "3, 8", "30, 19", "27, 112", "100, 26", "103, 88", }) - void countsSequenceLength(long x, long expected) { + void countsSequenceLength(final long x, final long expected) { assertThat(solve(x)).isEqualTo(expected); } } diff --git a/src/test/java/io/github/diegourban/algorithms/problems/recursion/RecursiveStringPermutationsTest.java b/src/test/java/io/github/diegourban/algorithms/problems/recursion/RecursiveStringPermutationsTest.java index 887303e..1a661a2 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/recursion/RecursiveStringPermutationsTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/recursion/RecursiveStringPermutationsTest.java @@ -16,14 +16,14 @@ */ class RecursiveStringPermutationsTest { - static Set solve(String input) { + static Set solve(final String input) { if (input.length() <= 1) { return Set.of(input); } - var allButLast = input.substring(0, input.length() - 1); - var last = input.charAt(input.length() - 1); - var permutations = new HashSet(); - for (var partial : solve(allButLast)) { + final var allButLast = input.substring(0, input.length() - 1); + final var last = input.charAt(input.length() - 1); + final var permutations = new HashSet(); + for (final var partial : solve(allButLast)) { for (var position = 0; position <= allButLast.length(); position++) { permutations.add(partial.substring(0, position) + last + partial.substring(position)); } diff --git a/src/test/java/io/github/diegourban/algorithms/problems/recursion/SquareRootOfTwoTest.java b/src/test/java/io/github/diegourban/algorithms/problems/recursion/SquareRootOfTwoTest.java index 156c50d..16dca37 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/recursion/SquareRootOfTwoTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/recursion/SquareRootOfTwoTest.java @@ -18,11 +18,11 @@ */ class SquareRootOfTwoTest { - static double solve(int n) { + static double solve(final int n) { return 1 + tail(n); } - private static double tail(int n) { + private static double tail(final int n) { return n == 0 ? 0 : 1 / (2 + tail(n - 1)); } @@ -33,13 +33,13 @@ private static double tail(int n) { "5, 1.4142857143", "100, 1.4142135624", }) - void approximatesSquareRootOfTwoToTenDecimals(int n, String expected) { + void approximatesSquareRootOfTwoToTenDecimals(final int n, final String expected) { assertThat(String.format(Locale.ROOT, "%.10f", solve(n))).isEqualTo(expected); } @ParameterizedTest @ValueSource(ints = {20, 100}) - void convergesToSquareRootOfTwo(int n) { + void convergesToSquareRootOfTwo(final int n) { assertThat(solve(n)).isCloseTo(Math.sqrt(2), offset(1e-12)); } } diff --git a/src/test/java/io/github/diegourban/algorithms/problems/search/FindRepeatTest.java b/src/test/java/io/github/diegourban/algorithms/problems/search/FindRepeatTest.java index 08eb636..c9d57bb 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/search/FindRepeatTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/search/FindRepeatTest.java @@ -14,18 +14,18 @@ */ class FindRepeatTest { - static int solve(int[] numbers) { + static int solve(final int[] numbers) { var floor = 1; var ceiling = numbers.length - 1; while (floor < ceiling) { - var midpoint = floor + (ceiling - floor) / 2; + final var midpoint = floor + (ceiling - floor) / 2; var itemsInLowerRange = 0; - for (var item : numbers) { + for (final var item : numbers) { if (item >= floor && item <= midpoint) { itemsInLowerRange++; } } - var distinctInLowerRange = midpoint - floor + 1; + final var distinctInLowerRange = midpoint - floor + 1; if (itemsInLowerRange > distinctInLowerRange) { ceiling = midpoint; } else { diff --git a/src/test/java/io/github/diegourban/algorithms/problems/search/FindRotationPointTest.java b/src/test/java/io/github/diegourban/algorithms/problems/search/FindRotationPointTest.java index 803c12f..c1f945d 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/search/FindRotationPointTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/search/FindRotationPointTest.java @@ -14,15 +14,15 @@ */ class FindRotationPointTest { - static int solve(String[] words) { - var firstWord = words[0]; + static int solve(final String[] words) { + final var firstWord = words[0]; if (firstWord.compareTo(words[words.length - 1]) <= 0) { return 0; // not rotated (or a single word): the first word is already the earliest } var floorIndex = 0; var ceilingIndex = words.length - 1; while (floorIndex + 1 < ceilingIndex) { - var guessIndex = floorIndex + (ceilingIndex - floorIndex) / 2; + final var guessIndex = floorIndex + (ceilingIndex - floorIndex) / 2; if (words[guessIndex].compareTo(firstWord) >= 0) { floorIndex = guessIndex; } else { diff --git a/src/test/java/io/github/diegourban/algorithms/problems/search/TwoBillsTest.java b/src/test/java/io/github/diegourban/algorithms/problems/search/TwoBillsTest.java index a600847..a21e61b 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/search/TwoBillsTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/search/TwoBillsTest.java @@ -27,8 +27,8 @@ class TwoBillsTest { private final SampleLoader samples = new SampleLoader("problems/search/two-bills"); - static boolean solve(int price, int paid) { - var change = paid - price; + static boolean solve(final int price, final int paid) { + final var change = paid - price; for (var i = 0; i < BILLS.length; i++) { for (var j = i; j < BILLS.length; j++) { if (BILLS[i] + BILLS[j] == change) { @@ -39,9 +39,9 @@ static boolean solve(int price, int paid) { return false; } - static String run(InputStream in) throws IOException { - var reader = new Reader(in); - var out = new StringBuilder(); + static String run(final InputStream in) throws IOException { + final var reader = new Reader(in); + final var out = new StringBuilder(); for (int price = reader.nextInt(), paid = reader.nextInt(); price != 0 || paid != 0; price = reader.nextInt(), paid = reader.nextInt()) { @@ -58,7 +58,7 @@ static String run(InputStream in) throws IOException { "1, 5", "0, 200", }) - void changeMadeOfTwoBillsIsPossible(int price, int paid) { + void changeMadeOfTwoBillsIsPossible(final int price, final int paid) { assertThat(solve(price, paid)).isTrue(); } @@ -71,7 +71,7 @@ void changeMadeOfTwoBillsIsPossible(int price, int paid) { "5, 5", "0, 201", }) - void otherChangeIsImpossible(int price, int paid) { + void otherChangeIsImpossible(final int price, final int paid) { assertThat(solve(price, paid)).isFalse(); } @@ -83,7 +83,7 @@ void zeroZeroEndsTheInput() throws IOException { @ParameterizedTest @ValueSource(strings = {"uri", "udebug"}) - void samples(String name) throws IOException { + void samples(final String name) throws IOException { assertThat(run(samples.loadAsInputStream(name + ".in"))).isEqualTo(samples.loadAsString(name + ".out")); } } diff --git a/src/test/java/io/github/diegourban/algorithms/problems/simulation/MaestersMapTest.java b/src/test/java/io/github/diegourban/algorithms/problems/simulation/MaestersMapTest.java index d510a9a..a4d0523 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/simulation/MaestersMapTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/simulation/MaestersMapTest.java @@ -25,16 +25,16 @@ class MaestersMapTest { private final SampleLoader samples = new SampleLoader("problems/simulation/maesters-map"); - static boolean solve(List rows) { - var height = rows.size(); - var width = height == 0 ? 0 : rows.getFirst().length(); - var usedArrows = new boolean[height][width]; + static boolean solve(final List rows) { + final var height = rows.size(); + final var width = height == 0 ? 0 : rows.getFirst().length(); + final var usedArrows = new boolean[height][width]; var row = 0; var col = 0; var dRow = 0; var dCol = 0; while (row >= 0 && row < height && col >= 0 && col < width) { - var cell = rows.get(row).charAt(col); + final var cell = rows.get(row).charAt(col); if (cell == '*') { return true; } @@ -63,11 +63,11 @@ static boolean solve(List rows) { return false; } - static String run(InputStream in) throws IOException { - var reader = new Reader(in); - var width = reader.nextInt(); - var height = reader.nextInt(); - var rows = new ArrayList(height); + static String run(final InputStream in) throws IOException { + final var reader = new Reader(in); + final var width = reader.nextInt(); + final var height = reader.nextInt(); + final var rows = new ArrayList(height); for (var i = 0; i < height; i++) { rows.add(reader.readLine().substring(0, width)); } @@ -101,7 +101,7 @@ void walkingOffTheMapIsAFailure() { "sampleFindChest1", "sampleFindChest2", "sampleFindChest3", "sampleFindChest4", "sampleFindChest5", "sampleFindChest6", }) - void samplesThatReachTheChest(String name) throws IOException { + void samplesThatReachTheChest(final String name) throws IOException { assertThat(run(samples.loadAsInputStream(name + ".in"))).isEqualTo("*\n"); } @@ -111,7 +111,7 @@ void samplesThatReachTheChest(String name) throws IOException { "sampleLoop1", "sampleLoop2", "sampleLoop3", "sampleLoop4", "sampleOutOfBounds1", "sampleOutOfBounds2", "sampleOutOfBounds3", "sampleOutOfBounds4", }) - void samplesThatLoopOrLeaveTheMap(String name) throws IOException { + void samplesThatLoopOrLeaveTheMap(final String name) throws IOException { assertThat(run(samples.loadAsInputStream(name + ".in"))).isEqualTo("!\n"); } } diff --git a/src/test/java/io/github/diegourban/algorithms/problems/simulation/StarTrekTest.java b/src/test/java/io/github/diegourban/algorithms/problems/simulation/StarTrekTest.java index c85ab5c..711514b 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/simulation/StarTrekTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/simulation/StarTrekTest.java @@ -26,20 +26,20 @@ class StarTrekTest { record Raid(int starsAttacked, long sheepLeft) {} - static Raid solve(int[] sheep) { - var left = sheep.clone(); - var attacked = new boolean[left.length]; + static Raid solve(final int[] sheep) { + final var left = sheep.clone(); + final var attacked = new boolean[left.length]; var star = 0; while (star >= 0 && star < left.length) { attacked[star] = true; - var odd = left[star] % 2 == 1; + final var odd = left[star] % 2 == 1; if (left[star] > 0) { left[star]--; } star += odd ? 1 : -1; } var starsAttacked = 0; - for (var a : attacked) { + for (final var a : attacked) { if (a) { starsAttacked++; } @@ -47,13 +47,13 @@ static Raid solve(int[] sheep) { return new Raid(starsAttacked, Arrays.stream(left).asLongStream().sum()); } - static String run(InputStream in) throws IOException { - var reader = new Reader(in); - var sheep = new int[reader.nextInt()]; + static String run(final InputStream in) throws IOException { + final var reader = new Reader(in); + final var sheep = new int[reader.nextInt()]; for (var i = 0; i < sheep.length; i++) { sheep[i] = reader.nextInt(); } - var raid = solve(sheep); + final var raid = solve(sheep); return raid.starsAttacked() + " " + raid.sheepLeft() + "\n"; } @@ -97,7 +97,7 @@ void judgeSamples() { "max2, 16000 15999968000", "max3, 8000 15999968002", }) - void maxSamples(String name, String expected) throws IOException { + void maxSamples(final String name, final String expected) throws IOException { assertThat(run(samples.loadAsInputStream(name + ".in"))).isEqualTo(expected + "\n"); } } diff --git a/src/test/java/io/github/diegourban/algorithms/problems/sorting/FindTheOddIntTest.java b/src/test/java/io/github/diegourban/algorithms/problems/sorting/FindTheOddIntTest.java index 0158c7d..4cccbc1 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/sorting/FindTheOddIntTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/sorting/FindTheOddIntTest.java @@ -17,8 +17,8 @@ */ class FindTheOddIntTest { - static int solve(int[] numbers) { - var sorted = numbers.clone(); + static int solve(final int[] numbers) { + final var sorted = numbers.clone(); new MergeSort().sort(sorted); var runStart = 0; for (var i = 1; i <= sorted.length; i++) { @@ -61,7 +61,7 @@ void answerIsTheSmallestValue() { @Test void doesNotMutateInput() { - var numbers = new int[] {3, 1, 3}; + final var numbers = new int[] {3, 1, 3}; solve(numbers); assertThat(numbers).containsExactly(3, 1, 3); } diff --git a/src/test/java/io/github/diegourban/algorithms/problems/string/ContractRevisionTest.java b/src/test/java/io/github/diegourban/algorithms/problems/string/ContractRevisionTest.java index 65735d0..69ff3b2 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/string/ContractRevisionTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/string/ContractRevisionTest.java @@ -22,9 +22,9 @@ class ContractRevisionTest { private static final SampleLoader SAMPLES = new SampleLoader("problems/string/contract-revision"); - static String solve(char faultyDigit, String number) { - var kept = new StringBuilder(number.length()); - for (var c : number.toCharArray()) { + static String solve(final char faultyDigit, final String number) { + final var kept = new StringBuilder(number.length()); + for (final var c : number.toCharArray()) { if (c != faultyDigit && !(c == '0' && kept.isEmpty())) { kept.append(c); } @@ -32,11 +32,11 @@ static String solve(char faultyDigit, String number) { return kept.isEmpty() ? "0" : kept.toString(); } - static String run(InputStream in) throws IOException { - var reader = new Reader(in); - var out = new StringBuilder(); + static String run(final InputStream in) throws IOException { + final var reader = new Reader(in); + final var out = new StringBuilder(); for (var line = reader.readLine(); !line.equals("0 0"); line = reader.readLine()) { - var parts = line.trim().split("\\s+"); + final var parts = line.trim().split("\\s+"); out.append(solve(parts[0].charAt(0), parts[1])).append('\n'); } return out.toString(); @@ -70,7 +70,7 @@ void handlesNumbersBeyondLongRange() { @ParameterizedTest @ValueSource(strings = {"uri", "udebug"}) - void matchesSample(String name) throws IOException { + void matchesSample(final String name) throws IOException { assertThat(run(SAMPLES.loadAsInputStream(name + ".in"))).isEqualTo(SAMPLES.loadAsString(name + ".out")); } } diff --git a/src/test/java/io/github/diegourban/algorithms/problems/string/EncryptionTest.java b/src/test/java/io/github/diegourban/algorithms/problems/string/EncryptionTest.java index e3b2c1a..115354f 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/string/EncryptionTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/string/EncryptionTest.java @@ -22,22 +22,22 @@ class EncryptionTest { private static final SampleLoader SAMPLES = new SampleLoader("problems/string/encryption"); - static String solve(String message) { - var shifted = new StringBuilder(message.length()); - for (var c : message.toCharArray()) { + static String solve(final String message) { + final var shifted = new StringBuilder(message.length()); + for (final var c : message.toCharArray()) { shifted.append(Character.isLetter(c) ? (char) (c + 3) : c); } - var chars = shifted.reverse().toString().toCharArray(); + final var chars = shifted.reverse().toString().toCharArray(); for (var i = chars.length / 2; i < chars.length; i++) { chars[i]--; } return new String(chars); } - static String run(InputStream in) throws IOException { - var reader = new Reader(in); - var n = reader.nextInt(); - var out = new StringBuilder(); + static String run(final InputStream in) throws IOException { + final var reader = new Reader(in); + final var n = reader.nextInt(); + final var out = new StringBuilder(); for (var i = 0; i < n; i++) { out.append(solve(reader.readLine())).append('\n'); } @@ -67,7 +67,7 @@ void oddLengthPutsMiddleCharacterInSecondHalf() { @ParameterizedTest @ValueSource(strings = {"uri", "udebug"}) - void matchesSample(String name) throws IOException { + void matchesSample(final String name) throws IOException { assertThat(run(SAMPLES.loadAsInputStream(name + ".in"))).isEqualTo(SAMPLES.loadAsString(name + ".out")); } } diff --git a/src/test/java/io/github/diegourban/algorithms/problems/string/MorseTest.java b/src/test/java/io/github/diegourban/algorithms/problems/string/MorseTest.java index 2d859fd..90685fe 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/string/MorseTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/string/MorseTest.java @@ -21,7 +21,7 @@ class MorseTest { "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.." }; - static String solve(String code) { + static String solve(final String code) { return Arrays.stream(code.split("\\.{7}")) .map(word -> Arrays.stream(word.split("\\.{3}")) .map(letter -> String.valueOf(decode(letter))) @@ -29,8 +29,8 @@ static String solve(String code) { .collect(Collectors.joining(" ")); } - private static char decode(String letter) { - var morse = Arrays.stream(letter.split("\\.")) + private static char decode(final String letter) { + final var morse = Arrays.stream(letter.split("\\.")) .map(signal -> signal.equals("=") ? "." : "-") .collect(Collectors.joining()); return (char) ('a' + Arrays.asList(MORSE).indexOf(morse)); diff --git a/src/test/java/io/github/diegourban/algorithms/problems/string/OneTwoThreeTest.java b/src/test/java/io/github/diegourban/algorithms/problems/string/OneTwoThreeTest.java index 3baf9df..9e5f776 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/string/OneTwoThreeTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/string/OneTwoThreeTest.java @@ -22,7 +22,7 @@ class OneTwoThreeTest { private static final SampleLoader SAMPLES = new SampleLoader("problems/string/one-two-three"); - static int solve(String word) { + static int solve(final String word) { if (hammingDistance(word, "one") <= 1) { return 1; } @@ -32,7 +32,7 @@ static int solve(String word) { return 3; } - private static int hammingDistance(String a, String b) { + private static int hammingDistance(final String a, final String b) { if (a.length() != b.length()) { return Integer.MAX_VALUE; } @@ -45,10 +45,10 @@ private static int hammingDistance(String a, String b) { return distance; } - static String run(InputStream in) throws IOException { - var reader = new Reader(in); - var n = reader.nextInt(); - var out = new StringBuilder(); + static String run(final InputStream in) throws IOException { + final var reader = new Reader(in); + final var n = reader.nextInt(); + final var out = new StringBuilder(); for (var i = 0; i < n; i++) { out.append(solve(reader.readLine().trim())).append('\n'); } @@ -75,7 +75,7 @@ void toleratesOneWrongLetterInAnyPosition() { @ParameterizedTest @ValueSource(strings = {"uri", "udebug"}) - void matchesSample(String name) throws IOException { + void matchesSample(final String name) throws IOException { assertThat(run(SAMPLES.loadAsInputStream(name + ".in"))).isEqualTo(SAMPLES.loadAsString(name + ".out")); } } diff --git a/src/test/java/io/github/diegourban/algorithms/problems/string/ParenthesisMatchingTest.java b/src/test/java/io/github/diegourban/algorithms/problems/string/ParenthesisMatchingTest.java index c04f74f..9450b32 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/string/ParenthesisMatchingTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/string/ParenthesisMatchingTest.java @@ -15,7 +15,7 @@ */ class ParenthesisMatchingTest { - static int solve(String sentence, int openingParenthesisIndex) { + static int solve(final String sentence, final int openingParenthesisIndex) { var openNested = 0; for (var position = openingParenthesisIndex + 1; position < sentence.length(); position++) { switch (sentence.charAt(position)) { diff --git a/src/test/java/io/github/diegourban/algorithms/problems/string/PlayingWithPassphrasesTest.java b/src/test/java/io/github/diegourban/algorithms/problems/string/PlayingWithPassphrasesTest.java index fbc2caf..480490a 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/string/PlayingWithPassphrasesTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/string/PlayingWithPassphrasesTest.java @@ -13,13 +13,13 @@ */ class PlayingWithPassphrasesTest { - static String solve(String text, int shift) { - var out = new StringBuilder(text.length()); + static String solve(final String text, final int shift) { + final var out = new StringBuilder(text.length()); for (var i = 0; i < text.length(); i++) { - var c = text.charAt(i); + final var c = text.charAt(i); if (Character.isLetter(c)) { - var base = Character.isUpperCase(c) ? 'A' : 'a'; - var shifted = (char) (base + (c - base + shift) % 26); + final var base = Character.isUpperCase(c) ? 'A' : 'a'; + final var shifted = (char) (base + (c - base + shift) % 26); out.append(i % 2 == 0 ? Character.toUpperCase(shifted) : Character.toLowerCase(shifted)); } else if (Character.isDigit(c)) { out.append((char) ('9' - c + '0')); diff --git a/src/test/java/io/github/diegourban/algorithms/problems/string/ReverseWordsTest.java b/src/test/java/io/github/diegourban/algorithms/problems/string/ReverseWordsTest.java index 909562d..b372bcf 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/string/ReverseWordsTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/string/ReverseWordsTest.java @@ -14,8 +14,8 @@ */ class ReverseWordsTest { - static String solve(String message) { - var chars = message.toCharArray(); + static String solve(final String message) { + final var chars = message.toCharArray(); reverse(chars, 0, chars.length - 1); var wordStart = 0; for (var i = 0; i <= chars.length; i++) { @@ -27,9 +27,9 @@ static String solve(String message) { return new String(chars); } - private static void reverse(char[] chars, int start, int end) { + private static void reverse(final char[] chars, final int start, final int end) { for (int front = start, back = end; front < back; front++, back--) { - var tmp = chars[front]; + final var tmp = chars[front]; chars[front] = chars[back]; chars[back] = tmp; } diff --git a/src/test/java/io/github/diegourban/algorithms/problems/string/SearchingSubsequencesTest.java b/src/test/java/io/github/diegourban/algorithms/problems/string/SearchingSubsequencesTest.java index 8fe8e83..c6e22af 100644 --- a/src/test/java/io/github/diegourban/algorithms/problems/string/SearchingSubsequencesTest.java +++ b/src/test/java/io/github/diegourban/algorithms/problems/string/SearchingSubsequencesTest.java @@ -26,7 +26,7 @@ class SearchingSubsequencesTest { /** {@code count} occurrences, the last one starting at 1-based {@code lastPosition} (0 when none). */ record Occurrences(int count, int lastPosition) {} - static Occurrences solve(String pattern, String text) { + static Occurrences solve(final String pattern, final String text) { var count = 0; var last = -1; for (var i = text.indexOf(pattern); i != -1; i = text.indexOf(pattern, i + 1)) { @@ -36,13 +36,13 @@ static Occurrences solve(String pattern, String text) { return new Occurrences(count, last + 1); } - static String run(InputStream in) throws IOException { - var reader = new Reader(in); - var out = new StringBuilder(); + static String run(final InputStream in) throws IOException { + final var reader = new Reader(in); + final var out = new StringBuilder(); var caseNumber = 0; while (true) { - String pattern; - String text; + final String pattern; + final String text; try { pattern = reader.readLine(); text = reader.readLine(); @@ -52,7 +52,7 @@ static String run(InputStream in) throws IOException { if (pattern.isEmpty() || text.isEmpty()) { break; } - var result = solve(pattern, text); + final var result = solve(pattern, text); out.append("Caso #").append(++caseNumber).append(":\n"); if (result.count() == 0) { out.append("Nao existe subsequencia\n"); @@ -79,7 +79,7 @@ void singleOccurrenceReportsItsPosition() { @Test void patternEqualToText() { - var number = "1" + "0".repeat(32); + final var number = "1" + "0".repeat(32); assertThat(solve(number, number)).isEqualTo(new Occurrences(1, 1)); } @@ -91,7 +91,7 @@ void overlappingOccurrencesAreCounted() { @ParameterizedTest @ValueSource(strings = {"uri"}) - void matchesSample(String name) throws IOException { + void matchesSample(final String name) throws IOException { assertThat(run(SAMPLES.loadAsInputStream(name + ".in"))).isEqualTo(SAMPLES.loadAsString(name + ".out")); } } diff --git a/src/test/java/io/github/diegourban/algorithms/search/BinarySearchPropertyTest.java b/src/test/java/io/github/diegourban/algorithms/search/BinarySearchPropertyTest.java index f27ce51..d2c70e8 100644 --- a/src/test/java/io/github/diegourban/algorithms/search/BinarySearchPropertyTest.java +++ b/src/test/java/io/github/diegourban/algorithms/search/BinarySearchPropertyTest.java @@ -13,10 +13,10 @@ class BinarySearchPropertyTest { @Property - void agreesWithTheJdk(@ForAll int[] items, @ForAll int key) { + void agreesWithTheJdk(@ForAll final int[] items, @ForAll final int key) { Arrays.sort(items); - var index = BinarySearch.indexOf(items, key); + final var index = BinarySearch.indexOf(items, key); if (Arrays.binarySearch(items, key) >= 0) { assertThat(items[index]).isEqualTo(key); @@ -26,10 +26,10 @@ void agreesWithTheJdk(@ForAll int[] items, @ForAll int key) { } @Property - void findsEveryElementThatIsPresent(@ForAll int[] items) { + void findsEveryElementThatIsPresent(@ForAll final int[] items) { Arrays.sort(items); - for (var item : items) { + for (final var item : items) { assertThat(items[BinarySearch.indexOf(items, item)]).isEqualTo(item); } } diff --git a/src/test/java/io/github/diegourban/algorithms/sorting/SorterPropertyTest.java b/src/test/java/io/github/diegourban/algorithms/sorting/SorterPropertyTest.java index e70a9b1..6cbc02a 100644 --- a/src/test/java/io/github/diegourban/algorithms/sorting/SorterPropertyTest.java +++ b/src/test/java/io/github/diegourban/algorithms/sorting/SorterPropertyTest.java @@ -20,8 +20,8 @@ Arbitrary sorters() { } @Property - void agreesWithTheJdk(@ForAll("sorters") Sorter sorter, @ForAll int[] items) { - var expected = items.clone(); + void agreesWithTheJdk(@ForAll("sorters") final Sorter sorter, @ForAll final int[] items) { + final var expected = items.clone(); Arrays.sort(expected); sorter.sort(items); diff --git a/src/test/java/io/github/diegourban/algorithms/sorting/SorterTest.java b/src/test/java/io/github/diegourban/algorithms/sorting/SorterTest.java index e5ec128..9486d22 100644 --- a/src/test/java/io/github/diegourban/algorithms/sorting/SorterTest.java +++ b/src/test/java/io/github/diegourban/algorithms/sorting/SorterTest.java @@ -15,34 +15,34 @@ static Stream sorters() { return Stream.of(new InsertionSort(), new SelectionSort(), new MergeSort(), new QuickSort()); } - private static int[] sorted(Sorter sorter, int... items) { + private static int[] sorted(final Sorter sorter, final int... items) { sorter.sort(items); return items; } @ParameterizedTest @MethodSource("sorters") - void sortsEvenLengthInput(Sorter sorter) { + void sortsEvenLengthInput(final Sorter sorter) { assertThat(sorted(sorter, 4, 5, 1, 9, 2, 3, 6, 7)).containsExactly(1, 2, 3, 4, 5, 6, 7, 9); } @ParameterizedTest @MethodSource("sorters") - void sortsOddLengthInput(Sorter sorter) { + void sortsOddLengthInput(final Sorter sorter) { assertThat(sorted(sorter, 4, 1, 8, 9, 10, 2, 3, 7, 6)).containsExactly(1, 2, 3, 4, 6, 7, 8, 9, 10); assertThat(sorted(sorter, 4, 5, 2, 9, 1, 7, 6, 3, 10)).containsExactly(1, 2, 3, 4, 5, 6, 7, 9, 10); } @ParameterizedTest @MethodSource("sorters") - void keepsDuplicatesAndNegatives(Sorter sorter) { + void keepsDuplicatesAndNegatives(final Sorter sorter) { assertThat(sorted(sorter, 3, -1, 3, 0, -1, Integer.MIN_VALUE, Integer.MAX_VALUE)) .containsExactly(Integer.MIN_VALUE, -1, -1, 0, 3, 3, Integer.MAX_VALUE); } @ParameterizedTest @MethodSource("sorters") - void handlesTrivialInputs(Sorter sorter) { + void handlesTrivialInputs(final Sorter sorter) { assertThat(sorted(sorter)).isEmpty(); assertThat(sorted(sorter, 42)).containsExactly(42); assertThat(sorted(sorter, 1, 2, 3)).containsExactly(1, 2, 3); diff --git a/src/test/java/io/github/diegourban/algorithms/string/StringUtilsPropertyTest.java b/src/test/java/io/github/diegourban/algorithms/string/StringUtilsPropertyTest.java index 09e7b28..0835b5d 100644 --- a/src/test/java/io/github/diegourban/algorithms/string/StringUtilsPropertyTest.java +++ b/src/test/java/io/github/diegourban/algorithms/string/StringUtilsPropertyTest.java @@ -19,26 +19,27 @@ class StringUtilsPropertyTest { @Property - void isPalindromeAgreesWithReversing(@ForAll @AlphaChars @NotEmpty @StringLength(max = 20) String s) { - var reversed = new StringBuilder(s).reverse().toString(); + void isPalindromeAgreesWithReversing(@ForAll @AlphaChars @NotEmpty @StringLength(max = 20) final String s) { + final var reversed = new StringBuilder(s).reverse().toString(); assertThat(StringUtils.isPalindrome(s)).isEqualTo(s.equals(reversed)); } @Property void mirroredStringsArePalindromes( - @ForAll @AlphaChars @NotEmpty @StringLength(max = 20) String s, @ForAll @AlphaChars char middle) { - var reversed = new StringBuilder(s).reverse().toString(); + @ForAll @AlphaChars @NotEmpty @StringLength(max = 20) final String s, + @ForAll @AlphaChars final char middle) { + final var reversed = new StringBuilder(s).reverse().toString(); assertThat(StringUtils.isPalindrome(s + reversed)).isTrue(); assertThat(StringUtils.isPalindrome(s + middle + reversed)).isTrue(); } @Property - void aShuffleIsAnAnagram(@ForAll @AlphaChars String s, @ForAll long seed) { - var chars = s.chars().mapToObj(c -> (char) c).collect(Collectors.toCollection(ArrayList::new)); + void aShuffleIsAnAnagram(@ForAll @AlphaChars final String s, @ForAll final long seed) { + final var chars = s.chars().mapToObj(c -> (char) c).collect(Collectors.toCollection(ArrayList::new)); Collections.shuffle(chars, new Random(seed)); - var shuffled = chars.stream().map(String::valueOf).collect(Collectors.joining()); + final var shuffled = chars.stream().map(String::valueOf).collect(Collectors.joining()); assertThat(StringUtils.isAnagram(s, shuffled)).isTrue(); assertThat(StringUtils.isAnagram(s.toUpperCase(), shuffled.toLowerCase())) @@ -47,11 +48,12 @@ void aShuffleIsAnAnagram(@ForAll @AlphaChars String s, @ForAll long seed) { @Property void isAnagramAgreesWithLetterCounts( - @ForAll @AlphaChars @StringLength(max = 6) String a, @ForAll @AlphaChars @StringLength(max = 6) String b) { + @ForAll @AlphaChars @StringLength(max = 6) final String a, + @ForAll @AlphaChars @StringLength(max = 6) final String b) { assertThat(StringUtils.isAnagram(a, b)).isEqualTo(letterCounts(a).equals(letterCounts(b))); } - private static java.util.Map letterCounts(String s) { + private static java.util.Map letterCounts(final String s) { return s.toLowerCase().chars().boxed().collect(Collectors.groupingBy(c -> c, Collectors.counting())); } } diff --git a/src/test/java/io/github/diegourban/algorithms/testing/SampleBuilder.java b/src/test/java/io/github/diegourban/algorithms/testing/SampleBuilder.java index d86d5d6..f58bb93 100644 --- a/src/test/java/io/github/diegourban/algorithms/testing/SampleBuilder.java +++ b/src/test/java/io/github/diegourban/algorithms/testing/SampleBuilder.java @@ -14,42 +14,42 @@ public SampleBuilder() { this.stringBuilder = new StringBuilder(); } - public SampleBuilder append(int i) { + public SampleBuilder append(final int i) { this.stringBuilder.append(i).append(SPACE_SEPARATOR); return this; } - public SampleBuilder appendln(int i) { + public SampleBuilder appendln(final int i) { this.stringBuilder.append(i).append(LINE_SEPARATOR); return this; } - public SampleBuilder append(double d) { + public SampleBuilder append(final double d) { this.stringBuilder.append(d).append(SPACE_SEPARATOR); return this; } - public SampleBuilder appendln(double d) { + public SampleBuilder appendln(final double d) { this.stringBuilder.append(d).append(LINE_SEPARATOR); return this; } - public SampleBuilder append(long l) { + public SampleBuilder append(final long l) { this.stringBuilder.append(l).append(SPACE_SEPARATOR); return this; } - public SampleBuilder appendln(long l) { + public SampleBuilder appendln(final long l) { this.stringBuilder.append(l).append(LINE_SEPARATOR); return this; } - public SampleBuilder append(String str) { + public SampleBuilder append(final String str) { this.stringBuilder.append(str).append(SPACE_SEPARATOR); return this; } - public SampleBuilder appendln(String str) { + public SampleBuilder appendln(final String str) { this.stringBuilder.append(str).append(LINE_SEPARATOR); return this; } diff --git a/src/test/java/io/github/diegourban/algorithms/testing/SampleBuilderTest.java b/src/test/java/io/github/diegourban/algorithms/testing/SampleBuilderTest.java index d4c5f78..e56d7e3 100644 --- a/src/test/java/io/github/diegourban/algorithms/testing/SampleBuilderTest.java +++ b/src/test/java/io/github/diegourban/algorithms/testing/SampleBuilderTest.java @@ -27,37 +27,37 @@ void shouldCreateInstance() { @Test void shouldBuildEmptyString() { - String sample = this.sampleBuilder.build(); + final String sample = this.sampleBuilder.build(); assertThat(sample).isEmpty(); } @Test void shouldAppendInteger() { - String sample = this.sampleBuilder.append(7).build(); + final String sample = this.sampleBuilder.append(7).build(); assertThat(sample).isEqualTo("7"); } @Test void shouldAppendDouble() { - String sample = this.sampleBuilder.append(1.2).build(); + final String sample = this.sampleBuilder.append(1.2).build(); assertThat(sample).isEqualTo("1.2"); } @Test void shouldAppendLong() { - String sample = this.sampleBuilder.append(123456789L).build(); + final String sample = this.sampleBuilder.append(123456789L).build(); assertThat(sample).isEqualTo("123456789"); } @Test void shouldAppendString() { - String sample = this.sampleBuilder.append("uyag s67a sdt1").build(); + final String sample = this.sampleBuilder.append("uyag s67a sdt1").build(); assertThat(sample).isEqualTo("uyag s67a sdt1"); } @Test void shouldAppendAllTypes() { - String sample = this.sampleBuilder + final String sample = this.sampleBuilder .append(123) .append(9.9) .append(9876543210L) @@ -68,63 +68,65 @@ void shouldAppendAllTypes() { @Test void shouldAppendTwoIntegerLines() { - String sample = this.sampleBuilder.appendln(786).append(1).build(); + final String sample = this.sampleBuilder.appendln(786).append(1).build(); - String expected = "786" + System.lineSeparator() + "1"; + final String expected = "786" + System.lineSeparator() + "1"; assertThat(sample).isEqualTo(expected); } @Test void shouldAppendTwoDoubleLines() { - String sample = this.sampleBuilder.appendln(2.34).append(.1).build(); + final String sample = this.sampleBuilder.appendln(2.34).append(.1).build(); - String expected = "2.34" + System.lineSeparator() + "0.1"; + final String expected = "2.34" + System.lineSeparator() + "0.1"; assertThat(sample).isEqualTo(expected); } @Test void shouldAppendTwoLongLines() { - String sample = + final String sample = this.sampleBuilder.appendln(123987123987L).append(1122334455L).build(); - String expected = "123987123987" + System.lineSeparator() + "1122334455"; + final String expected = "123987123987" + System.lineSeparator() + "1122334455"; assertThat(sample).isEqualTo(expected); } @Test void shouldAppendTwoStringLines() { - String sample = this.sampleBuilder.appendln("abc").append("zz1").build(); + final String sample = this.sampleBuilder.appendln("abc").append("zz1").build(); - String expected = "abc" + System.lineSeparator() + "zz1"; + final String expected = "abc" + System.lineSeparator() + "zz1"; assertThat(sample).isEqualTo(expected); } @Test void shouldAppendTwoLines() { - String sample = this.sampleBuilder.appendln(786).append("chihuahua").build(); + final String sample = + this.sampleBuilder.appendln(786).append("chihuahua").build(); - String expected = "786" + System.lineSeparator() + "chihuahua"; + final String expected = "786" + System.lineSeparator() + "chihuahua"; assertThat(sample).isEqualTo(expected); } @Test void shouldAppendTwoLinesWithNewLineAtTheEnd() { - String sample = this.sampleBuilder.appendln(1.2).appendln("muchacho").build(); + final String sample = + this.sampleBuilder.appendln(1.2).appendln("muchacho").build(); - String expected = "1.2" + System.lineSeparator() + "muchacho" + System.lineSeparator(); + final String expected = "1.2" + System.lineSeparator() + "muchacho" + System.lineSeparator(); assertThat(sample).isEqualTo(expected); } @Test void shouldAppendFourLinesOneTypeEach() { - String sample = this.sampleBuilder + final String sample = this.sampleBuilder .appendln(123) .appendln(987654321L) .appendln(99.99) .appendln("end") .build(); - String expected = "123" + System.lineSeparator() + "987654321" + System.lineSeparator() + "99.99" + final String expected = "123" + System.lineSeparator() + "987654321" + System.lineSeparator() + "99.99" + System.lineSeparator() + "end" + System.lineSeparator(); assertThat(sample).isEqualTo(expected); } diff --git a/src/test/java/io/github/diegourban/algorithms/testing/SampleLoader.java b/src/test/java/io/github/diegourban/algorithms/testing/SampleLoader.java index c43d640..45e0188 100644 --- a/src/test/java/io/github/diegourban/algorithms/testing/SampleLoader.java +++ b/src/test/java/io/github/diegourban/algorithms/testing/SampleLoader.java @@ -15,12 +15,12 @@ public final class SampleLoader { private final String resourceDir; - public SampleLoader(String resourceDir) { + public SampleLoader(final String resourceDir) { this.resourceDir = resourceDir.endsWith("/") ? resourceDir : resourceDir + "/"; } - public String loadAsString(String fileName) { - var path = resourceDir + fileName; + public String loadAsString(final String fileName) { + final var path = resourceDir + fileName; try (var in = SampleLoader.class.getClassLoader().getResourceAsStream(path)) { if (in == null) { throw new IllegalArgumentException("Sample not found on classpath: " + path); @@ -31,7 +31,7 @@ public String loadAsString(String fileName) { } } - public InputStream loadAsInputStream(String fileName) { + public InputStream loadAsInputStream(final String fileName) { return new ByteArrayInputStream(loadAsString(fileName).getBytes(StandardCharsets.UTF_8)); } } From 418b1cef0fcc415ccb3a4f76052fbdfa79f9ed0a Mon Sep 17 00:00:00 2001 From: Diego Leonardo Urban Date: Fri, 6 Nov 2026 16:54:37 +0100 Subject: [PATCH 2/2] Enforce final modifiers with PMD in the build config/pmd/final-modifiers.xml enables MethodArgumentCouldBeFinal, LocalVariableCouldBeFinal, ImmutableField and ClassWithOnlyPrivateConstructorsShouldBeFinal; ./mvnw verify runs pmd:check over main and test sources and fails on any violation. The "could be final" rules ignore reassigned variables. The bulk final commit is added to .git-blame-ignore-revs. Co-Authored-By: Claude Opus 5.5 --- .git-blame-ignore-revs | 3 +++ config/pmd/final-modifiers.xml | 15 +++++++++++++++ pom.xml | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 51 insertions(+) create mode 100644 config/pmd/final-modifiers.xml diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs index 3726c41..0b0c368 100644 --- a/.git-blame-ignore-revs +++ b/.git-blame-ignore-revs @@ -3,3 +3,6 @@ # Reformat all Java sources with palantir-java-format f490a4f2627cc093ad2cfa4ba93809556254e7de + +# Add final to parameters, locals, fields and static-only classes +5c6d4e98af79d60fc12d93bbfba6b9dac8406b8f diff --git a/config/pmd/final-modifiers.xml b/config/pmd/final-modifiers.xml new file mode 100644 index 0000000..219e0bc --- /dev/null +++ b/config/pmd/final-modifiers.xml @@ -0,0 +1,15 @@ + + + + Use final wherever a variable or class is never changed. The "could be final" rules only flag parameters and + locals that are never reassigned, so code that deliberately reassigns stays as it is. + + + + + + + diff --git a/pom.xml b/pom.xml index fcbee54..88bbf7e 100644 --- a/pom.xml +++ b/pom.xml @@ -30,6 +30,8 @@ 0.8.16 3.11.0 2.103.0 + 3.28.0 + 7.29.0 @@ -115,6 +117,37 @@ + + maven-pmd-plugin + ${maven-pmd-plugin.version} + + + config/pmd/final-modifiers.xml + + true + true + false + + + + net.sourceforge.pmd + pmd-core + ${pmd.version} + + + net.sourceforge.pmd + pmd-java + ${pmd.version} + + + + + + check + + + + maven-enforcer-plugin ${maven-enforcer-plugin.version}