From 539ce3e78713eb42393d7d61e816ca8f4bb6bd5c Mon Sep 17 00:00:00 2001 From: amit2103 Date: Sun, 28 Oct 2018 23:29:09 +0530 Subject: [PATCH] [BAEL-9551] - Splitted algorithms into 4 modules --- algorithms-genetic/.gitignore | 4 + algorithms-genetic/README.md | 4 + {algorithms => algorithms-genetic}/pom.xml | 190 ++++++------ .../roundUpToHundred/.gitignore | 0 .../src/com/java/src/RoundUpToHundred.java | 40 +-- .../com/java/src/RoundUpToHundredTest.java | 28 +- .../com/baeldung/algorithms/RunAlgorithm.java | 0 .../algorithms/ga/annealing/City.java | 0 .../ga/annealing/SimulatedAnnealing.java | 0 .../algorithms/ga/annealing/Travel.java | 0 .../algorithms/ga/ant_colony/Ant.java | 0 .../ga/ant_colony/AntColonyOptimization.java | 0 .../algorithms/ga/binary/Individual.java | 0 .../algorithms/ga/binary/Population.java | 0 .../ga/binary/SimpleGeneticAlgorithm.java | 0 .../algorithms/ga/dijkstra/Dijkstra.java | 0 .../algorithms/ga/dijkstra/Graph.java | 0 .../baeldung/algorithms/ga/dijkstra/Node.java | 0 .../algorithms/ga/jenetics/Knapsack.java | 0 .../algorithms/ga/jenetics/KnapsackFF.java | 0 .../algorithms/ga/jenetics/KnapsackItem.java | 0 .../ga/jenetics/SimpleGeneticAlgorithm.java | 0 .../ga/jenetics/SpringsteenProblem.java | 0 .../ga/jenetics/SpringsteenRecord.java | 0 .../algorithms/ga/jenetics/SubsetSum.java | 0 .../ga/jenetics/TravelingSalesman.java | 0 .../algorithms/slope_one/InputData.java | 0 .../baeldung/algorithms/slope_one/Item.java | 0 .../algorithms/slope_one/SlopeOne.java | 0 .../baeldung/algorithms/slope_one/User.java | 0 .../src/main/resources/logback.xml | 0 ...ColonyOptimizationLongRunningUnitTest.java | 0 ...ryGeneticAlgorithmLongRunningUnitTest.java | 0 .../DijkstraAlgorithmLongRunningUnitTest.java | 0 ...SimulatedAnnealingLongRunningUnitTest.java | 0 algorithms-miscellaneous-1/.gitignore | 4 + algorithms-miscellaneous-1/README.md | 12 + algorithms-miscellaneous-1/pom.xml | 96 ++++++ .../roundUpToHundred/.gitignore | 1 + .../src/com/java/src/RoundUpToHundred.java | 20 ++ .../com/java/src/RoundUpToHundredTest.java | 14 + .../automata/FiniteStateMachine.java | 0 .../automata/RtFiniteStateMachine.java | 0 .../baeldung/algorithms/automata/RtState.java | 0 .../algorithms/automata/RtTransition.java | 0 .../baeldung/algorithms/automata/State.java | 0 .../algorithms/automata/Transition.java | 0 .../algorithms/binarysearch/BinarySearch.java | 0 .../algorithms/hillclimbing/HillClimbing.java | 0 .../algorithms/hillclimbing/State.java | 0 .../algorithms/kthlargest/FindKthLargest.java | 0 .../LinesIntersectionService.java | 0 .../mcts/montecarlo/MonteCarloTreeSearch.java | 0 .../algorithms/mcts/montecarlo/State.java | 0 .../algorithms/mcts/montecarlo/UCT.java | 0 .../algorithms/mcts/tictactoe/Board.java | 0 .../algorithms/mcts/tictactoe/Position.java | 0 .../baeldung/algorithms/mcts/tree/Node.java | 0 .../baeldung/algorithms/mcts/tree/Tree.java | 0 .../MiddleElementLookup.java | 0 .../algorithms/middleelementlookup/Node.java | 0 .../algorithms/minimax/GameOfBones.java | 0 .../baeldung/algorithms/minimax/MiniMax.java | 0 .../com/baeldung/algorithms/minimax/Node.java | 0 .../com/baeldung/algorithms/minimax/Tree.java | 0 .../algorithms/multiswarm/Constants.java | 0 .../multiswarm/FitnessFunction.java | 0 .../algorithms/multiswarm/Multiswarm.java | 0 .../algorithms/multiswarm/Particle.java | 0 .../baeldung/algorithms/multiswarm/Swarm.java | 0 .../string/EnglishAlphabetLetters.java | 0 .../string/search/StringSearchAlgorithms.java | 0 .../src/main/resources/logback.xml | 13 + .../src/main/resources/maze/maze1.txt | 22 +- .../src/main/resources/maze/maze2.txt | 42 +-- .../HillClimbingAlgorithmUnitTest.java | 0 .../MiddleElementLookupUnitTest.java | 0 ...FiniteStateMachineLongRunningUnitTest.java | 0 .../StringSearchAlgorithmsUnitTest.java | 0 .../binarysearch/BinarySearchUnitTest.java | 0 .../kthlargest/FindKthLargestUnitTest.java | 0 .../LinesIntersectionServiceUnitTest.java | 0 .../algorithms/mcts/MCTSUnitTest.java | 0 .../algorithms/minimax/MinimaxUnitTest.java | 0 .../multiswarm/LolFitnessFunction.java | 0 .../multiswarm/MultiswarmUnitTest.java | 0 .../EnglishAlphabetLettersUnitTest.java | 0 .../algorithms/support/MayFailRule.java | 0 algorithms-miscellaneous-2/.gitignore | 4 + .../README.md | 16 - algorithms-miscellaneous-2/pom.xml | 96 ++++++ .../roundUpToHundred/.gitignore | 1 + .../src/com/java/src/RoundUpToHundred.java | 20 ++ .../com/java/src/RoundUpToHundredTest.java | 14 + .../conversion/HexStringConverter.java | 0 .../DistanceBetweenPointsService.java | 0 .../editdistance/EditDistanceBase.java | 30 +- .../EditDistanceDynamicProgramming.java | 52 ++-- .../editdistance/EditDistanceRecursive.java | 42 +-- .../linkedlist/CycleDetectionBruteForce.java | 76 ++--- .../CycleDetectionByFastAndSlowIterators.java | 50 ++-- .../linkedlist/CycleDetectionByHashing.java | 54 ++-- .../linkedlist/CycleDetectionResult.java | 24 +- .../linkedlist/CycleRemovalBruteForce.java | 112 +++---- .../CycleRemovalByCountingLoopNodes.java | 88 +++--- .../CycleRemovalWithoutCountingLoopNodes.java | 54 ++-- .../baeldung/algorithms/linkedlist/Node.java | 74 ++--- .../algorithms/maze/solver/BFSMazeSolver.java | 104 +++---- .../algorithms/maze/solver/Coordinate.java | 62 ++-- .../algorithms/maze/solver/DFSMazeSolver.java | 96 +++--- .../baeldung/algorithms/maze/solver/Maze.java | 282 +++++++++--------- .../algorithms/maze/solver/MazeDriver.java | 68 ++--- .../NumberWordConverter.java | 0 .../algorithms/rectanglesoverlap/Point.java | 0 .../rectanglesoverlap/Rectangle.java | 0 .../romannumerals/RomanArabicConverter.java | 104 +++---- .../romannumerals/RomanNumeral.java | 52 ++-- .../sudoku/BacktrackingAlgorithm.java | 0 .../algorithms/sudoku/ColumnNode.java | 0 .../algorithms/sudoku/DancingLinks.java | 0 .../sudoku/DancingLinksAlgorithm.java | 0 .../algorithms/sudoku/DancingNode.java | 0 .../src/main/resources/logback.xml | 13 + .../src/main/resources/maze/maze1.txt | 12 + .../src/main/resources/maze/maze2.txt | 22 ++ .../analysis/AnalysisRunnerLiveTest.java | 0 .../ByteArrayConverterUnitTest.java | 0 .../DistanceBetweenPointsServiceUnitTest.java | 0 .../EditDistanceDataProvider.java | 42 +-- .../editdistance/EditDistanceUnitTest.java | 64 ++-- .../CycleDetectionBruteForceUnitTest.java | 46 +-- ...tectionByFastAndSlowIteratorsUnitTest.java | 46 +-- .../CycleDetectionByHashingUnitTest.java | 46 +-- .../linkedlist/CycleDetectionTestBase.java | 124 ++++---- .../CycleRemovalBruteForceUnitTest.java | 48 +-- ...cleRemovalByCountingLoopNodesUnitTest.java | 48 +-- ...movalWithoutCountingLoopNodesUnitTest.java | 46 +-- .../NumberWordConverterUnitTest.java | 0 .../rectanglesoverlap/RectangleUnitTest.java | 0 .../RomanArabicConverterUnitTest.java | 58 ++-- .../jgrapht/CompleteGraphUnitTest.java | 0 .../jgrapht/DirectedGraphUnitTest.java | 0 .../jgrapht/EulerianCircuitUnitTest.java | 0 algorithms-sorting/.gitignore | 4 + algorithms-sorting/README.md | 7 + algorithms-sorting/pom.xml | 96 ++++++ .../roundUpToHundred/.gitignore | 1 + .../src/com/java/src/RoundUpToHundred.java | 20 ++ .../com/java/src/RoundUpToHundredTest.java | 14 + .../algorithms/bubblesort/BubbleSort.java | 80 ++--- .../baeldung/algorithms/heapsort/Heap.java | 0 .../insertionsort/InsertionSort.java | 0 .../algorithms/mergesort/MergeSort.java | 0 .../algorithms/quicksort/QuickSort.java | 0 .../quicksort/ThreeWayQuickSort.java | 0 .../src/main/resources/logback.xml | 13 + .../bubblesort/BubbleSortUnitTest.java | 50 ++-- .../algorithms/heapsort/HeapUnitTest.java | 0 .../insertionsort/InsertionSortUnitTest.java | 0 .../mergesort/MergeSortUnitTest.java | 0 .../quicksort/QuickSortUnitTest.java | 0 .../quicksort/ThreeWayQuickSortUnitTest.java | 0 algorithms/.gitignore | 1 - pom.xml | 10 +- 164 files changed, 1735 insertions(+), 1241 deletions(-) create mode 100644 algorithms-genetic/.gitignore create mode 100644 algorithms-genetic/README.md rename {algorithms => algorithms-genetic}/pom.xml (96%) rename {algorithms => algorithms-genetic}/roundUpToHundred/.gitignore (100%) rename {algorithms => algorithms-genetic}/roundUpToHundred/src/com/java/src/RoundUpToHundred.java (95%) rename {algorithms => algorithms-genetic}/roundUpToHundred/src/com/java/src/RoundUpToHundredTest.java (97%) rename {algorithms => algorithms-genetic}/src/main/java/com/baeldung/algorithms/RunAlgorithm.java (100%) rename {algorithms => algorithms-genetic}/src/main/java/com/baeldung/algorithms/ga/annealing/City.java (100%) rename {algorithms => algorithms-genetic}/src/main/java/com/baeldung/algorithms/ga/annealing/SimulatedAnnealing.java (100%) rename {algorithms => algorithms-genetic}/src/main/java/com/baeldung/algorithms/ga/annealing/Travel.java (100%) rename {algorithms => algorithms-genetic}/src/main/java/com/baeldung/algorithms/ga/ant_colony/Ant.java (100%) rename {algorithms => algorithms-genetic}/src/main/java/com/baeldung/algorithms/ga/ant_colony/AntColonyOptimization.java (100%) rename {algorithms => algorithms-genetic}/src/main/java/com/baeldung/algorithms/ga/binary/Individual.java (100%) rename {algorithms => algorithms-genetic}/src/main/java/com/baeldung/algorithms/ga/binary/Population.java (100%) rename {algorithms => algorithms-genetic}/src/main/java/com/baeldung/algorithms/ga/binary/SimpleGeneticAlgorithm.java (100%) rename {algorithms => algorithms-genetic}/src/main/java/com/baeldung/algorithms/ga/dijkstra/Dijkstra.java (100%) rename {algorithms => algorithms-genetic}/src/main/java/com/baeldung/algorithms/ga/dijkstra/Graph.java (100%) rename {algorithms => algorithms-genetic}/src/main/java/com/baeldung/algorithms/ga/dijkstra/Node.java (100%) rename {algorithms => algorithms-genetic}/src/main/java/com/baeldung/algorithms/ga/jenetics/Knapsack.java (100%) rename {algorithms => algorithms-genetic}/src/main/java/com/baeldung/algorithms/ga/jenetics/KnapsackFF.java (100%) rename {algorithms => algorithms-genetic}/src/main/java/com/baeldung/algorithms/ga/jenetics/KnapsackItem.java (100%) rename {algorithms => algorithms-genetic}/src/main/java/com/baeldung/algorithms/ga/jenetics/SimpleGeneticAlgorithm.java (100%) rename {algorithms => algorithms-genetic}/src/main/java/com/baeldung/algorithms/ga/jenetics/SpringsteenProblem.java (100%) rename {algorithms => algorithms-genetic}/src/main/java/com/baeldung/algorithms/ga/jenetics/SpringsteenRecord.java (100%) rename {algorithms => algorithms-genetic}/src/main/java/com/baeldung/algorithms/ga/jenetics/SubsetSum.java (100%) rename {algorithms => algorithms-genetic}/src/main/java/com/baeldung/algorithms/ga/jenetics/TravelingSalesman.java (100%) rename {algorithms => algorithms-genetic}/src/main/java/com/baeldung/algorithms/slope_one/InputData.java (100%) rename {algorithms => algorithms-genetic}/src/main/java/com/baeldung/algorithms/slope_one/Item.java (100%) rename {algorithms => algorithms-genetic}/src/main/java/com/baeldung/algorithms/slope_one/SlopeOne.java (100%) rename {algorithms => algorithms-genetic}/src/main/java/com/baeldung/algorithms/slope_one/User.java (100%) rename {algorithms => algorithms-genetic}/src/main/resources/logback.xml (100%) rename {algorithms => algorithms-genetic}/src/test/java/com/baeldung/algorithms/AntColonyOptimizationLongRunningUnitTest.java (100%) rename {algorithms => algorithms-genetic}/src/test/java/com/baeldung/algorithms/BinaryGeneticAlgorithmLongRunningUnitTest.java (100%) rename {algorithms => algorithms-genetic}/src/test/java/com/baeldung/algorithms/DijkstraAlgorithmLongRunningUnitTest.java (100%) rename {algorithms => algorithms-genetic}/src/test/java/com/baeldung/algorithms/SimulatedAnnealingLongRunningUnitTest.java (100%) create mode 100644 algorithms-miscellaneous-1/.gitignore create mode 100644 algorithms-miscellaneous-1/README.md create mode 100644 algorithms-miscellaneous-1/pom.xml create mode 100644 algorithms-miscellaneous-1/roundUpToHundred/.gitignore create mode 100644 algorithms-miscellaneous-1/roundUpToHundred/src/com/java/src/RoundUpToHundred.java create mode 100644 algorithms-miscellaneous-1/roundUpToHundred/src/com/java/src/RoundUpToHundredTest.java rename {algorithms => algorithms-miscellaneous-1}/src/main/java/com/baeldung/algorithms/automata/FiniteStateMachine.java (100%) rename {algorithms => algorithms-miscellaneous-1}/src/main/java/com/baeldung/algorithms/automata/RtFiniteStateMachine.java (100%) rename {algorithms => algorithms-miscellaneous-1}/src/main/java/com/baeldung/algorithms/automata/RtState.java (100%) rename {algorithms => algorithms-miscellaneous-1}/src/main/java/com/baeldung/algorithms/automata/RtTransition.java (100%) rename {algorithms => algorithms-miscellaneous-1}/src/main/java/com/baeldung/algorithms/automata/State.java (100%) rename {algorithms => algorithms-miscellaneous-1}/src/main/java/com/baeldung/algorithms/automata/Transition.java (100%) rename {algorithms => algorithms-miscellaneous-1}/src/main/java/com/baeldung/algorithms/binarysearch/BinarySearch.java (100%) rename {algorithms => algorithms-miscellaneous-1}/src/main/java/com/baeldung/algorithms/hillclimbing/HillClimbing.java (100%) rename {algorithms => algorithms-miscellaneous-1}/src/main/java/com/baeldung/algorithms/hillclimbing/State.java (100%) rename {algorithms => algorithms-miscellaneous-1}/src/main/java/com/baeldung/algorithms/kthlargest/FindKthLargest.java (100%) rename {algorithms => algorithms-miscellaneous-1}/src/main/java/com/baeldung/algorithms/linesintersection/LinesIntersectionService.java (100%) rename {algorithms => algorithms-miscellaneous-1}/src/main/java/com/baeldung/algorithms/mcts/montecarlo/MonteCarloTreeSearch.java (100%) rename {algorithms => algorithms-miscellaneous-1}/src/main/java/com/baeldung/algorithms/mcts/montecarlo/State.java (100%) rename {algorithms => algorithms-miscellaneous-1}/src/main/java/com/baeldung/algorithms/mcts/montecarlo/UCT.java (100%) rename {algorithms => algorithms-miscellaneous-1}/src/main/java/com/baeldung/algorithms/mcts/tictactoe/Board.java (100%) rename {algorithms => algorithms-miscellaneous-1}/src/main/java/com/baeldung/algorithms/mcts/tictactoe/Position.java (100%) rename {algorithms => algorithms-miscellaneous-1}/src/main/java/com/baeldung/algorithms/mcts/tree/Node.java (100%) rename {algorithms => algorithms-miscellaneous-1}/src/main/java/com/baeldung/algorithms/mcts/tree/Tree.java (100%) rename {algorithms => algorithms-miscellaneous-1}/src/main/java/com/baeldung/algorithms/middleelementlookup/MiddleElementLookup.java (100%) rename {algorithms => algorithms-miscellaneous-1}/src/main/java/com/baeldung/algorithms/middleelementlookup/Node.java (100%) rename {algorithms => algorithms-miscellaneous-1}/src/main/java/com/baeldung/algorithms/minimax/GameOfBones.java (100%) rename {algorithms => algorithms-miscellaneous-1}/src/main/java/com/baeldung/algorithms/minimax/MiniMax.java (100%) rename {algorithms => algorithms-miscellaneous-1}/src/main/java/com/baeldung/algorithms/minimax/Node.java (100%) rename {algorithms => algorithms-miscellaneous-1}/src/main/java/com/baeldung/algorithms/minimax/Tree.java (100%) rename {algorithms => algorithms-miscellaneous-1}/src/main/java/com/baeldung/algorithms/multiswarm/Constants.java (100%) rename {algorithms => algorithms-miscellaneous-1}/src/main/java/com/baeldung/algorithms/multiswarm/FitnessFunction.java (100%) rename {algorithms => algorithms-miscellaneous-1}/src/main/java/com/baeldung/algorithms/multiswarm/Multiswarm.java (100%) rename {algorithms => algorithms-miscellaneous-1}/src/main/java/com/baeldung/algorithms/multiswarm/Particle.java (100%) rename {algorithms => algorithms-miscellaneous-1}/src/main/java/com/baeldung/algorithms/multiswarm/Swarm.java (100%) rename {algorithms => algorithms-miscellaneous-1}/src/main/java/com/baeldung/algorithms/string/EnglishAlphabetLetters.java (100%) rename {algorithms => algorithms-miscellaneous-1}/src/main/java/com/baeldung/algorithms/string/search/StringSearchAlgorithms.java (100%) create mode 100644 algorithms-miscellaneous-1/src/main/resources/logback.xml rename {algorithms => algorithms-miscellaneous-1}/src/main/resources/maze/maze1.txt (92%) rename {algorithms => algorithms-miscellaneous-1}/src/main/resources/maze/maze2.txt (96%) rename {algorithms => algorithms-miscellaneous-1}/src/test/java/com/baeldung/algorithms/HillClimbingAlgorithmUnitTest.java (100%) rename {algorithms => algorithms-miscellaneous-1}/src/test/java/com/baeldung/algorithms/MiddleElementLookupUnitTest.java (100%) rename {algorithms => algorithms-miscellaneous-1}/src/test/java/com/baeldung/algorithms/RtFiniteStateMachineLongRunningUnitTest.java (100%) rename {algorithms => algorithms-miscellaneous-1}/src/test/java/com/baeldung/algorithms/StringSearchAlgorithmsUnitTest.java (100%) rename {algorithms => algorithms-miscellaneous-1}/src/test/java/com/baeldung/algorithms/binarysearch/BinarySearchUnitTest.java (100%) rename {algorithms => algorithms-miscellaneous-1}/src/test/java/com/baeldung/algorithms/kthlargest/FindKthLargestUnitTest.java (100%) rename {algorithms => algorithms-miscellaneous-1}/src/test/java/com/baeldung/algorithms/linesintersection/LinesIntersectionServiceUnitTest.java (100%) rename {algorithms => algorithms-miscellaneous-1}/src/test/java/com/baeldung/algorithms/mcts/MCTSUnitTest.java (100%) rename {algorithms => algorithms-miscellaneous-1}/src/test/java/com/baeldung/algorithms/minimax/MinimaxUnitTest.java (100%) rename {algorithms => algorithms-miscellaneous-1}/src/test/java/com/baeldung/algorithms/multiswarm/LolFitnessFunction.java (100%) rename {algorithms => algorithms-miscellaneous-1}/src/test/java/com/baeldung/algorithms/multiswarm/MultiswarmUnitTest.java (100%) rename {algorithms => algorithms-miscellaneous-1}/src/test/java/com/baeldung/algorithms/string/EnglishAlphabetLettersUnitTest.java (100%) rename {algorithms => algorithms-miscellaneous-1}/src/test/java/com/baeldung/algorithms/support/MayFailRule.java (100%) create mode 100644 algorithms-miscellaneous-2/.gitignore rename {algorithms => algorithms-miscellaneous-2}/README.md (54%) create mode 100644 algorithms-miscellaneous-2/pom.xml create mode 100644 algorithms-miscellaneous-2/roundUpToHundred/.gitignore create mode 100644 algorithms-miscellaneous-2/roundUpToHundred/src/com/java/src/RoundUpToHundred.java create mode 100644 algorithms-miscellaneous-2/roundUpToHundred/src/com/java/src/RoundUpToHundredTest.java rename {algorithms => algorithms-miscellaneous-2}/src/main/java/com/baeldung/algorithms/conversion/HexStringConverter.java (100%) rename {algorithms => algorithms-miscellaneous-2}/src/main/java/com/baeldung/algorithms/distancebetweenpoints/DistanceBetweenPointsService.java (100%) rename {algorithms => algorithms-miscellaneous-2}/src/main/java/com/baeldung/algorithms/editdistance/EditDistanceBase.java (95%) rename {algorithms => algorithms-miscellaneous-2}/src/main/java/com/baeldung/algorithms/editdistance/EditDistanceDynamicProgramming.java (96%) rename {algorithms => algorithms-miscellaneous-2}/src/main/java/com/baeldung/algorithms/editdistance/EditDistanceRecursive.java (96%) rename {algorithms => algorithms-miscellaneous-2}/src/main/java/com/baeldung/algorithms/linkedlist/CycleDetectionBruteForce.java (96%) rename {algorithms => algorithms-miscellaneous-2}/src/main/java/com/baeldung/algorithms/linkedlist/CycleDetectionByFastAndSlowIterators.java (96%) rename {algorithms => algorithms-miscellaneous-2}/src/main/java/com/baeldung/algorithms/linkedlist/CycleDetectionByHashing.java (96%) rename {algorithms => algorithms-miscellaneous-2}/src/main/java/com/baeldung/algorithms/linkedlist/CycleDetectionResult.java (96%) rename {algorithms => algorithms-miscellaneous-2}/src/main/java/com/baeldung/algorithms/linkedlist/CycleRemovalBruteForce.java (96%) rename {algorithms => algorithms-miscellaneous-2}/src/main/java/com/baeldung/algorithms/linkedlist/CycleRemovalByCountingLoopNodes.java (96%) rename {algorithms => algorithms-miscellaneous-2}/src/main/java/com/baeldung/algorithms/linkedlist/CycleRemovalWithoutCountingLoopNodes.java (96%) rename {algorithms => algorithms-miscellaneous-2}/src/main/java/com/baeldung/algorithms/linkedlist/Node.java (95%) rename {algorithms => algorithms-miscellaneous-2}/src/main/java/com/baeldung/algorithms/maze/solver/BFSMazeSolver.java (96%) rename {algorithms => algorithms-miscellaneous-2}/src/main/java/com/baeldung/algorithms/maze/solver/Coordinate.java (94%) rename {algorithms => algorithms-miscellaneous-2}/src/main/java/com/baeldung/algorithms/maze/solver/DFSMazeSolver.java (96%) rename {algorithms => algorithms-miscellaneous-2}/src/main/java/com/baeldung/algorithms/maze/solver/Maze.java (96%) rename {algorithms => algorithms-miscellaneous-2}/src/main/java/com/baeldung/algorithms/maze/solver/MazeDriver.java (96%) rename {algorithms => algorithms-miscellaneous-2}/src/main/java/com/baeldung/algorithms/numberwordconverter/NumberWordConverter.java (100%) rename {algorithms => algorithms-miscellaneous-2}/src/main/java/com/baeldung/algorithms/rectanglesoverlap/Point.java (100%) rename {algorithms => algorithms-miscellaneous-2}/src/main/java/com/baeldung/algorithms/rectanglesoverlap/Rectangle.java (100%) rename {algorithms => algorithms-miscellaneous-2}/src/main/java/com/baeldung/algorithms/romannumerals/RomanArabicConverter.java (96%) rename {algorithms => algorithms-miscellaneous-2}/src/main/java/com/baeldung/algorithms/romannumerals/RomanNumeral.java (96%) rename {algorithms => algorithms-miscellaneous-2}/src/main/java/com/baeldung/algorithms/sudoku/BacktrackingAlgorithm.java (100%) rename {algorithms => algorithms-miscellaneous-2}/src/main/java/com/baeldung/algorithms/sudoku/ColumnNode.java (100%) rename {algorithms => algorithms-miscellaneous-2}/src/main/java/com/baeldung/algorithms/sudoku/DancingLinks.java (100%) rename {algorithms => algorithms-miscellaneous-2}/src/main/java/com/baeldung/algorithms/sudoku/DancingLinksAlgorithm.java (100%) rename {algorithms => algorithms-miscellaneous-2}/src/main/java/com/baeldung/algorithms/sudoku/DancingNode.java (100%) create mode 100644 algorithms-miscellaneous-2/src/main/resources/logback.xml create mode 100644 algorithms-miscellaneous-2/src/main/resources/maze/maze1.txt create mode 100644 algorithms-miscellaneous-2/src/main/resources/maze/maze2.txt rename {algorithms => algorithms-miscellaneous-2}/src/test/java/com/baeldung/algorithms/analysis/AnalysisRunnerLiveTest.java (100%) rename {algorithms => algorithms-miscellaneous-2}/src/test/java/com/baeldung/algorithms/conversion/ByteArrayConverterUnitTest.java (100%) rename {algorithms => algorithms-miscellaneous-2}/src/test/java/com/baeldung/algorithms/distancebetweenpoints/DistanceBetweenPointsServiceUnitTest.java (100%) rename {algorithms => algorithms-miscellaneous-2}/src/test/java/com/baeldung/algorithms/editdistance/EditDistanceDataProvider.java (96%) rename {algorithms => algorithms-miscellaneous-2}/src/test/java/com/baeldung/algorithms/editdistance/EditDistanceUnitTest.java (96%) rename {algorithms => algorithms-miscellaneous-2}/src/test/java/com/baeldung/algorithms/linkedlist/CycleDetectionBruteForceUnitTest.java (96%) rename {algorithms => algorithms-miscellaneous-2}/src/test/java/com/baeldung/algorithms/linkedlist/CycleDetectionByFastAndSlowIteratorsUnitTest.java (96%) rename {algorithms => algorithms-miscellaneous-2}/src/test/java/com/baeldung/algorithms/linkedlist/CycleDetectionByHashingUnitTest.java (96%) rename {algorithms => algorithms-miscellaneous-2}/src/test/java/com/baeldung/algorithms/linkedlist/CycleDetectionTestBase.java (96%) rename {algorithms => algorithms-miscellaneous-2}/src/test/java/com/baeldung/algorithms/linkedlist/CycleRemovalBruteForceUnitTest.java (97%) rename {algorithms => algorithms-miscellaneous-2}/src/test/java/com/baeldung/algorithms/linkedlist/CycleRemovalByCountingLoopNodesUnitTest.java (97%) rename {algorithms => algorithms-miscellaneous-2}/src/test/java/com/baeldung/algorithms/linkedlist/CycleRemovalWithoutCountingLoopNodesUnitTest.java (97%) rename {algorithms => algorithms-miscellaneous-2}/src/test/java/com/baeldung/algorithms/moneywords/NumberWordConverterUnitTest.java (100%) rename {algorithms => algorithms-miscellaneous-2}/src/test/java/com/baeldung/algorithms/rectanglesoverlap/RectangleUnitTest.java (100%) rename {algorithms => algorithms-miscellaneous-2}/src/test/java/com/baeldung/algorithms/romannumerals/RomanArabicConverterUnitTest.java (95%) rename {algorithms => algorithms-miscellaneous-2}/src/test/java/com/baeldung/jgrapht/CompleteGraphUnitTest.java (100%) rename {algorithms => algorithms-miscellaneous-2}/src/test/java/com/baeldung/jgrapht/DirectedGraphUnitTest.java (100%) rename {algorithms => algorithms-miscellaneous-2}/src/test/java/com/baeldung/jgrapht/EulerianCircuitUnitTest.java (100%) create mode 100644 algorithms-sorting/.gitignore create mode 100644 algorithms-sorting/README.md create mode 100644 algorithms-sorting/pom.xml create mode 100644 algorithms-sorting/roundUpToHundred/.gitignore create mode 100644 algorithms-sorting/roundUpToHundred/src/com/java/src/RoundUpToHundred.java create mode 100644 algorithms-sorting/roundUpToHundred/src/com/java/src/RoundUpToHundredTest.java rename {algorithms => algorithms-sorting}/src/main/java/com/baeldung/algorithms/bubblesort/BubbleSort.java (96%) rename {algorithms => algorithms-sorting}/src/main/java/com/baeldung/algorithms/heapsort/Heap.java (100%) rename {algorithms => algorithms-sorting}/src/main/java/com/baeldung/algorithms/insertionsort/InsertionSort.java (100%) rename {algorithms => algorithms-sorting}/src/main/java/com/baeldung/algorithms/mergesort/MergeSort.java (100%) rename {algorithms => algorithms-sorting}/src/main/java/com/baeldung/algorithms/quicksort/QuickSort.java (100%) rename {algorithms => algorithms-sorting}/src/main/java/com/baeldung/algorithms/quicksort/ThreeWayQuickSort.java (100%) create mode 100644 algorithms-sorting/src/main/resources/logback.xml rename {algorithms => algorithms-sorting}/src/test/java/com/baeldung/algorithms/bubblesort/BubbleSortUnitTest.java (97%) rename {algorithms => algorithms-sorting}/src/test/java/com/baeldung/algorithms/heapsort/HeapUnitTest.java (100%) rename {algorithms => algorithms-sorting}/src/test/java/com/baeldung/algorithms/insertionsort/InsertionSortUnitTest.java (100%) rename {algorithms => algorithms-sorting}/src/test/java/com/baeldung/algorithms/mergesort/MergeSortUnitTest.java (100%) rename {algorithms => algorithms-sorting}/src/test/java/com/baeldung/algorithms/quicksort/QuickSortUnitTest.java (100%) rename {algorithms => algorithms-sorting}/src/test/java/com/baeldung/algorithms/quicksort/ThreeWayQuickSortUnitTest.java (100%) delete mode 100644 algorithms/.gitignore diff --git a/algorithms-genetic/.gitignore b/algorithms-genetic/.gitignore new file mode 100644 index 000000000000..30b2b7442c55 --- /dev/null +++ b/algorithms-genetic/.gitignore @@ -0,0 +1,4 @@ +/target/ +.settings/ +.classpath +.project \ No newline at end of file diff --git a/algorithms-genetic/README.md b/algorithms-genetic/README.md new file mode 100644 index 000000000000..0f68918fffdc --- /dev/null +++ b/algorithms-genetic/README.md @@ -0,0 +1,4 @@ +## Relevant articles: + +- [Introduction to Jenetics Library](http://www.baeldung.com/jenetics) +- [Ant Colony Optimization](http://www.baeldung.com/java-ant-colony-optimization) \ No newline at end of file diff --git a/algorithms/pom.xml b/algorithms-genetic/pom.xml similarity index 96% rename from algorithms/pom.xml rename to algorithms-genetic/pom.xml index db4a1c2effcd..94d21159a9ac 100644 --- a/algorithms/pom.xml +++ b/algorithms-genetic/pom.xml @@ -1,96 +1,96 @@ - - 4.0.0 - com.baeldung - algorithms - 0.0.1-SNAPSHOT - - - com.baeldung - parent-modules - 1.0.0-SNAPSHOT - - - - - org.apache.commons - commons-math3 - ${commons-math3.version} - - - commons-codec - commons-codec - ${commons-codec.version} - - - org.projectlombok - lombok - ${lombok.version} - provided - - - io.jenetics - jenetics - ${io.jenetics.version} - - - org.jgrapht - jgrapht-core - ${org.jgrapht.core.version} - - - pl.allegro.finance - tradukisto - ${tradukisto.version} - - - org.assertj - assertj-core - ${org.assertj.core.version} - test - - - - - - - - org.codehaus.mojo - exec-maven-plugin - ${exec-maven-plugin.version} - - - - - - - - - org.codehaus.mojo - cobertura-maven-plugin - 2.7 - - - - com/baeldung/algorithms/dijkstra/* - - - com/baeldung/algorithms/dijkstra/* - - - - - - - - - 1.16.12 - 3.6.1 - 1.0.1 - 3.7.0 - 1.0.1 - 3.9.0 - 1.11 - - + + 4.0.0 + com.baeldung + algorithms-genetic + 0.0.1-SNAPSHOT + + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + + + + + org.apache.commons + commons-math3 + ${commons-math3.version} + + + commons-codec + commons-codec + ${commons-codec.version} + + + org.projectlombok + lombok + ${lombok.version} + provided + + + io.jenetics + jenetics + ${io.jenetics.version} + + + org.jgrapht + jgrapht-core + ${org.jgrapht.core.version} + + + pl.allegro.finance + tradukisto + ${tradukisto.version} + + + org.assertj + assertj-core + ${org.assertj.core.version} + test + + + + + + + + org.codehaus.mojo + exec-maven-plugin + ${exec-maven-plugin.version} + + + + + + + + + org.codehaus.mojo + cobertura-maven-plugin + 2.7 + + + + com/baeldung/algorithms/dijkstra/* + + + com/baeldung/algorithms/dijkstra/* + + + + + + + + + 1.16.12 + 3.6.1 + 1.0.1 + 3.7.0 + 1.0.1 + 3.9.0 + 1.11 + + \ No newline at end of file diff --git a/algorithms/roundUpToHundred/.gitignore b/algorithms-genetic/roundUpToHundred/.gitignore similarity index 100% rename from algorithms/roundUpToHundred/.gitignore rename to algorithms-genetic/roundUpToHundred/.gitignore diff --git a/algorithms/roundUpToHundred/src/com/java/src/RoundUpToHundred.java b/algorithms-genetic/roundUpToHundred/src/com/java/src/RoundUpToHundred.java similarity index 95% rename from algorithms/roundUpToHundred/src/com/java/src/RoundUpToHundred.java rename to algorithms-genetic/roundUpToHundred/src/com/java/src/RoundUpToHundred.java index f5024c227dbf..6c02a340d37f 100644 --- a/algorithms/roundUpToHundred/src/com/java/src/RoundUpToHundred.java +++ b/algorithms-genetic/roundUpToHundred/src/com/java/src/RoundUpToHundred.java @@ -1,20 +1,20 @@ -package com.java.src; - -import java.util.Scanner; - -public class RoundUpToHundred { - - public static void main(String[] args) { - Scanner scanner = new Scanner(System.in); - double input = scanner.nextDouble(); - scanner.close(); - - RoundUpToHundred.round(input); - } - - static long round(double input) { - long i = (long) Math.ceil(input); - return ((i + 99) / 100) * 100; - }; - -} +package com.java.src; + +import java.util.Scanner; + +public class RoundUpToHundred { + + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + double input = scanner.nextDouble(); + scanner.close(); + + RoundUpToHundred.round(input); + } + + static long round(double input) { + long i = (long) Math.ceil(input); + return ((i + 99) / 100) * 100; + }; + +} diff --git a/algorithms/roundUpToHundred/src/com/java/src/RoundUpToHundredTest.java b/algorithms-genetic/roundUpToHundred/src/com/java/src/RoundUpToHundredTest.java similarity index 97% rename from algorithms/roundUpToHundred/src/com/java/src/RoundUpToHundredTest.java rename to algorithms-genetic/roundUpToHundred/src/com/java/src/RoundUpToHundredTest.java index f35a9a249fc1..cb541ad49c43 100644 --- a/algorithms/roundUpToHundred/src/com/java/src/RoundUpToHundredTest.java +++ b/algorithms-genetic/roundUpToHundred/src/com/java/src/RoundUpToHundredTest.java @@ -1,14 +1,14 @@ -package com.java.src; - -import static org.junit.Assert.assertEquals; - -import org.junit.Test; - -public class RoundUpToHundredTest { - @Test - public void givenInput_whenRound_thenRoundUpToTheNearestHundred() { - assertEquals("Rounded up to hundred", 100, RoundUpToHundred.round(99)); - assertEquals("Rounded up to three hundred ", 300, RoundUpToHundred.round(200.2)); - assertEquals("Returns same rounded value", 400, RoundUpToHundred.round(400)); - } -} +package com.java.src; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +public class RoundUpToHundredTest { + @Test + public void givenInput_whenRound_thenRoundUpToTheNearestHundred() { + assertEquals("Rounded up to hundred", 100, RoundUpToHundred.round(99)); + assertEquals("Rounded up to three hundred ", 300, RoundUpToHundred.round(200.2)); + assertEquals("Returns same rounded value", 400, RoundUpToHundred.round(400)); + } +} diff --git a/algorithms/src/main/java/com/baeldung/algorithms/RunAlgorithm.java b/algorithms-genetic/src/main/java/com/baeldung/algorithms/RunAlgorithm.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/RunAlgorithm.java rename to algorithms-genetic/src/main/java/com/baeldung/algorithms/RunAlgorithm.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/ga/annealing/City.java b/algorithms-genetic/src/main/java/com/baeldung/algorithms/ga/annealing/City.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/ga/annealing/City.java rename to algorithms-genetic/src/main/java/com/baeldung/algorithms/ga/annealing/City.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/ga/annealing/SimulatedAnnealing.java b/algorithms-genetic/src/main/java/com/baeldung/algorithms/ga/annealing/SimulatedAnnealing.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/ga/annealing/SimulatedAnnealing.java rename to algorithms-genetic/src/main/java/com/baeldung/algorithms/ga/annealing/SimulatedAnnealing.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/ga/annealing/Travel.java b/algorithms-genetic/src/main/java/com/baeldung/algorithms/ga/annealing/Travel.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/ga/annealing/Travel.java rename to algorithms-genetic/src/main/java/com/baeldung/algorithms/ga/annealing/Travel.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/ga/ant_colony/Ant.java b/algorithms-genetic/src/main/java/com/baeldung/algorithms/ga/ant_colony/Ant.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/ga/ant_colony/Ant.java rename to algorithms-genetic/src/main/java/com/baeldung/algorithms/ga/ant_colony/Ant.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/ga/ant_colony/AntColonyOptimization.java b/algorithms-genetic/src/main/java/com/baeldung/algorithms/ga/ant_colony/AntColonyOptimization.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/ga/ant_colony/AntColonyOptimization.java rename to algorithms-genetic/src/main/java/com/baeldung/algorithms/ga/ant_colony/AntColonyOptimization.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/ga/binary/Individual.java b/algorithms-genetic/src/main/java/com/baeldung/algorithms/ga/binary/Individual.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/ga/binary/Individual.java rename to algorithms-genetic/src/main/java/com/baeldung/algorithms/ga/binary/Individual.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/ga/binary/Population.java b/algorithms-genetic/src/main/java/com/baeldung/algorithms/ga/binary/Population.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/ga/binary/Population.java rename to algorithms-genetic/src/main/java/com/baeldung/algorithms/ga/binary/Population.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/ga/binary/SimpleGeneticAlgorithm.java b/algorithms-genetic/src/main/java/com/baeldung/algorithms/ga/binary/SimpleGeneticAlgorithm.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/ga/binary/SimpleGeneticAlgorithm.java rename to algorithms-genetic/src/main/java/com/baeldung/algorithms/ga/binary/SimpleGeneticAlgorithm.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/ga/dijkstra/Dijkstra.java b/algorithms-genetic/src/main/java/com/baeldung/algorithms/ga/dijkstra/Dijkstra.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/ga/dijkstra/Dijkstra.java rename to algorithms-genetic/src/main/java/com/baeldung/algorithms/ga/dijkstra/Dijkstra.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/ga/dijkstra/Graph.java b/algorithms-genetic/src/main/java/com/baeldung/algorithms/ga/dijkstra/Graph.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/ga/dijkstra/Graph.java rename to algorithms-genetic/src/main/java/com/baeldung/algorithms/ga/dijkstra/Graph.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/ga/dijkstra/Node.java b/algorithms-genetic/src/main/java/com/baeldung/algorithms/ga/dijkstra/Node.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/ga/dijkstra/Node.java rename to algorithms-genetic/src/main/java/com/baeldung/algorithms/ga/dijkstra/Node.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/ga/jenetics/Knapsack.java b/algorithms-genetic/src/main/java/com/baeldung/algorithms/ga/jenetics/Knapsack.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/ga/jenetics/Knapsack.java rename to algorithms-genetic/src/main/java/com/baeldung/algorithms/ga/jenetics/Knapsack.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/ga/jenetics/KnapsackFF.java b/algorithms-genetic/src/main/java/com/baeldung/algorithms/ga/jenetics/KnapsackFF.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/ga/jenetics/KnapsackFF.java rename to algorithms-genetic/src/main/java/com/baeldung/algorithms/ga/jenetics/KnapsackFF.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/ga/jenetics/KnapsackItem.java b/algorithms-genetic/src/main/java/com/baeldung/algorithms/ga/jenetics/KnapsackItem.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/ga/jenetics/KnapsackItem.java rename to algorithms-genetic/src/main/java/com/baeldung/algorithms/ga/jenetics/KnapsackItem.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/ga/jenetics/SimpleGeneticAlgorithm.java b/algorithms-genetic/src/main/java/com/baeldung/algorithms/ga/jenetics/SimpleGeneticAlgorithm.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/ga/jenetics/SimpleGeneticAlgorithm.java rename to algorithms-genetic/src/main/java/com/baeldung/algorithms/ga/jenetics/SimpleGeneticAlgorithm.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/ga/jenetics/SpringsteenProblem.java b/algorithms-genetic/src/main/java/com/baeldung/algorithms/ga/jenetics/SpringsteenProblem.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/ga/jenetics/SpringsteenProblem.java rename to algorithms-genetic/src/main/java/com/baeldung/algorithms/ga/jenetics/SpringsteenProblem.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/ga/jenetics/SpringsteenRecord.java b/algorithms-genetic/src/main/java/com/baeldung/algorithms/ga/jenetics/SpringsteenRecord.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/ga/jenetics/SpringsteenRecord.java rename to algorithms-genetic/src/main/java/com/baeldung/algorithms/ga/jenetics/SpringsteenRecord.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/ga/jenetics/SubsetSum.java b/algorithms-genetic/src/main/java/com/baeldung/algorithms/ga/jenetics/SubsetSum.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/ga/jenetics/SubsetSum.java rename to algorithms-genetic/src/main/java/com/baeldung/algorithms/ga/jenetics/SubsetSum.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/ga/jenetics/TravelingSalesman.java b/algorithms-genetic/src/main/java/com/baeldung/algorithms/ga/jenetics/TravelingSalesman.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/ga/jenetics/TravelingSalesman.java rename to algorithms-genetic/src/main/java/com/baeldung/algorithms/ga/jenetics/TravelingSalesman.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/slope_one/InputData.java b/algorithms-genetic/src/main/java/com/baeldung/algorithms/slope_one/InputData.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/slope_one/InputData.java rename to algorithms-genetic/src/main/java/com/baeldung/algorithms/slope_one/InputData.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/slope_one/Item.java b/algorithms-genetic/src/main/java/com/baeldung/algorithms/slope_one/Item.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/slope_one/Item.java rename to algorithms-genetic/src/main/java/com/baeldung/algorithms/slope_one/Item.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/slope_one/SlopeOne.java b/algorithms-genetic/src/main/java/com/baeldung/algorithms/slope_one/SlopeOne.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/slope_one/SlopeOne.java rename to algorithms-genetic/src/main/java/com/baeldung/algorithms/slope_one/SlopeOne.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/slope_one/User.java b/algorithms-genetic/src/main/java/com/baeldung/algorithms/slope_one/User.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/slope_one/User.java rename to algorithms-genetic/src/main/java/com/baeldung/algorithms/slope_one/User.java diff --git a/algorithms/src/main/resources/logback.xml b/algorithms-genetic/src/main/resources/logback.xml similarity index 100% rename from algorithms/src/main/resources/logback.xml rename to algorithms-genetic/src/main/resources/logback.xml diff --git a/algorithms/src/test/java/com/baeldung/algorithms/AntColonyOptimizationLongRunningUnitTest.java b/algorithms-genetic/src/test/java/com/baeldung/algorithms/AntColonyOptimizationLongRunningUnitTest.java similarity index 100% rename from algorithms/src/test/java/com/baeldung/algorithms/AntColonyOptimizationLongRunningUnitTest.java rename to algorithms-genetic/src/test/java/com/baeldung/algorithms/AntColonyOptimizationLongRunningUnitTest.java diff --git a/algorithms/src/test/java/com/baeldung/algorithms/BinaryGeneticAlgorithmLongRunningUnitTest.java b/algorithms-genetic/src/test/java/com/baeldung/algorithms/BinaryGeneticAlgorithmLongRunningUnitTest.java similarity index 100% rename from algorithms/src/test/java/com/baeldung/algorithms/BinaryGeneticAlgorithmLongRunningUnitTest.java rename to algorithms-genetic/src/test/java/com/baeldung/algorithms/BinaryGeneticAlgorithmLongRunningUnitTest.java diff --git a/algorithms/src/test/java/com/baeldung/algorithms/DijkstraAlgorithmLongRunningUnitTest.java b/algorithms-genetic/src/test/java/com/baeldung/algorithms/DijkstraAlgorithmLongRunningUnitTest.java similarity index 100% rename from algorithms/src/test/java/com/baeldung/algorithms/DijkstraAlgorithmLongRunningUnitTest.java rename to algorithms-genetic/src/test/java/com/baeldung/algorithms/DijkstraAlgorithmLongRunningUnitTest.java diff --git a/algorithms/src/test/java/com/baeldung/algorithms/SimulatedAnnealingLongRunningUnitTest.java b/algorithms-genetic/src/test/java/com/baeldung/algorithms/SimulatedAnnealingLongRunningUnitTest.java similarity index 100% rename from algorithms/src/test/java/com/baeldung/algorithms/SimulatedAnnealingLongRunningUnitTest.java rename to algorithms-genetic/src/test/java/com/baeldung/algorithms/SimulatedAnnealingLongRunningUnitTest.java diff --git a/algorithms-miscellaneous-1/.gitignore b/algorithms-miscellaneous-1/.gitignore new file mode 100644 index 000000000000..30b2b7442c55 --- /dev/null +++ b/algorithms-miscellaneous-1/.gitignore @@ -0,0 +1,4 @@ +/target/ +.settings/ +.classpath +.project \ No newline at end of file diff --git a/algorithms-miscellaneous-1/README.md b/algorithms-miscellaneous-1/README.md new file mode 100644 index 000000000000..9efb2233bf32 --- /dev/null +++ b/algorithms-miscellaneous-1/README.md @@ -0,0 +1,12 @@ +## Relevant articles: + +- [Validating Input With Finite Automata in Java](http://www.baeldung.com/java-finite-automata) +- [Example of Hill Climbing Algorithm](http://www.baeldung.com/java-hill-climbing-algorithm) +- [Monte Carlo Tree Search for Tic-Tac-Toe Game](http://www.baeldung.com/java-monte-carlo-tree-search) +- [Binary Search Algorithm in Java](http://www.baeldung.com/java-binary-search) +- [Introduction to Minimax Algorithm](http://www.baeldung.com/java-minimax-algorithm) +- [How to Calculate Levenshtein Distance in Java?](http://www.baeldung.com/java-levenshtein-distance) +- [How to Find the Kth Largest Element in Java](http://www.baeldung.com/java-kth-largest-element) +- [Multi-Swarm Optimization Algorithm in Java](http://www.baeldung.com/java-multi-swarm-algorithm) +- [String Search Algorithms for Large Texts](http://www.baeldung.com/java-full-text-search-algorithms) +- [Check If a String Contains All The Letters of The Alphabet](https://www.baeldung.com/java-string-contains-all-letters) \ No newline at end of file diff --git a/algorithms-miscellaneous-1/pom.xml b/algorithms-miscellaneous-1/pom.xml new file mode 100644 index 000000000000..e154e9e43dde --- /dev/null +++ b/algorithms-miscellaneous-1/pom.xml @@ -0,0 +1,96 @@ + + 4.0.0 + com.baeldung + algorithms-miscellaneous-1 + 0.0.1-SNAPSHOT + + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + + + + + org.apache.commons + commons-math3 + ${commons-math3.version} + + + commons-codec + commons-codec + ${commons-codec.version} + + + org.projectlombok + lombok + ${lombok.version} + provided + + + io.jenetics + jenetics + ${io.jenetics.version} + + + org.jgrapht + jgrapht-core + ${org.jgrapht.core.version} + + + pl.allegro.finance + tradukisto + ${tradukisto.version} + + + org.assertj + assertj-core + ${org.assertj.core.version} + test + + + + + + + + org.codehaus.mojo + exec-maven-plugin + ${exec-maven-plugin.version} + + + + + + + + + org.codehaus.mojo + cobertura-maven-plugin + 2.7 + + + + com/baeldung/algorithms/dijkstra/* + + + com/baeldung/algorithms/dijkstra/* + + + + + + + + + 1.16.12 + 3.6.1 + 1.0.1 + 3.7.0 + 1.0.1 + 3.9.0 + 1.11 + + + \ No newline at end of file diff --git a/algorithms-miscellaneous-1/roundUpToHundred/.gitignore b/algorithms-miscellaneous-1/roundUpToHundred/.gitignore new file mode 100644 index 000000000000..ae3c1726048c --- /dev/null +++ b/algorithms-miscellaneous-1/roundUpToHundred/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/algorithms-miscellaneous-1/roundUpToHundred/src/com/java/src/RoundUpToHundred.java b/algorithms-miscellaneous-1/roundUpToHundred/src/com/java/src/RoundUpToHundred.java new file mode 100644 index 000000000000..6c02a340d37f --- /dev/null +++ b/algorithms-miscellaneous-1/roundUpToHundred/src/com/java/src/RoundUpToHundred.java @@ -0,0 +1,20 @@ +package com.java.src; + +import java.util.Scanner; + +public class RoundUpToHundred { + + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + double input = scanner.nextDouble(); + scanner.close(); + + RoundUpToHundred.round(input); + } + + static long round(double input) { + long i = (long) Math.ceil(input); + return ((i + 99) / 100) * 100; + }; + +} diff --git a/algorithms-miscellaneous-1/roundUpToHundred/src/com/java/src/RoundUpToHundredTest.java b/algorithms-miscellaneous-1/roundUpToHundred/src/com/java/src/RoundUpToHundredTest.java new file mode 100644 index 000000000000..cb541ad49c43 --- /dev/null +++ b/algorithms-miscellaneous-1/roundUpToHundred/src/com/java/src/RoundUpToHundredTest.java @@ -0,0 +1,14 @@ +package com.java.src; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +public class RoundUpToHundredTest { + @Test + public void givenInput_whenRound_thenRoundUpToTheNearestHundred() { + assertEquals("Rounded up to hundred", 100, RoundUpToHundred.round(99)); + assertEquals("Rounded up to three hundred ", 300, RoundUpToHundred.round(200.2)); + assertEquals("Returns same rounded value", 400, RoundUpToHundred.round(400)); + } +} diff --git a/algorithms/src/main/java/com/baeldung/algorithms/automata/FiniteStateMachine.java b/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/automata/FiniteStateMachine.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/automata/FiniteStateMachine.java rename to algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/automata/FiniteStateMachine.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/automata/RtFiniteStateMachine.java b/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/automata/RtFiniteStateMachine.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/automata/RtFiniteStateMachine.java rename to algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/automata/RtFiniteStateMachine.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/automata/RtState.java b/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/automata/RtState.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/automata/RtState.java rename to algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/automata/RtState.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/automata/RtTransition.java b/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/automata/RtTransition.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/automata/RtTransition.java rename to algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/automata/RtTransition.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/automata/State.java b/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/automata/State.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/automata/State.java rename to algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/automata/State.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/automata/Transition.java b/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/automata/Transition.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/automata/Transition.java rename to algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/automata/Transition.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/binarysearch/BinarySearch.java b/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/binarysearch/BinarySearch.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/binarysearch/BinarySearch.java rename to algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/binarysearch/BinarySearch.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/hillclimbing/HillClimbing.java b/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/hillclimbing/HillClimbing.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/hillclimbing/HillClimbing.java rename to algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/hillclimbing/HillClimbing.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/hillclimbing/State.java b/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/hillclimbing/State.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/hillclimbing/State.java rename to algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/hillclimbing/State.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/kthlargest/FindKthLargest.java b/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/kthlargest/FindKthLargest.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/kthlargest/FindKthLargest.java rename to algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/kthlargest/FindKthLargest.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/linesintersection/LinesIntersectionService.java b/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/linesintersection/LinesIntersectionService.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/linesintersection/LinesIntersectionService.java rename to algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/linesintersection/LinesIntersectionService.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/mcts/montecarlo/MonteCarloTreeSearch.java b/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/mcts/montecarlo/MonteCarloTreeSearch.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/mcts/montecarlo/MonteCarloTreeSearch.java rename to algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/mcts/montecarlo/MonteCarloTreeSearch.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/mcts/montecarlo/State.java b/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/mcts/montecarlo/State.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/mcts/montecarlo/State.java rename to algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/mcts/montecarlo/State.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/mcts/montecarlo/UCT.java b/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/mcts/montecarlo/UCT.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/mcts/montecarlo/UCT.java rename to algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/mcts/montecarlo/UCT.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/mcts/tictactoe/Board.java b/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/mcts/tictactoe/Board.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/mcts/tictactoe/Board.java rename to algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/mcts/tictactoe/Board.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/mcts/tictactoe/Position.java b/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/mcts/tictactoe/Position.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/mcts/tictactoe/Position.java rename to algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/mcts/tictactoe/Position.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/mcts/tree/Node.java b/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/mcts/tree/Node.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/mcts/tree/Node.java rename to algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/mcts/tree/Node.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/mcts/tree/Tree.java b/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/mcts/tree/Tree.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/mcts/tree/Tree.java rename to algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/mcts/tree/Tree.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/middleelementlookup/MiddleElementLookup.java b/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/middleelementlookup/MiddleElementLookup.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/middleelementlookup/MiddleElementLookup.java rename to algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/middleelementlookup/MiddleElementLookup.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/middleelementlookup/Node.java b/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/middleelementlookup/Node.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/middleelementlookup/Node.java rename to algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/middleelementlookup/Node.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/minimax/GameOfBones.java b/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/minimax/GameOfBones.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/minimax/GameOfBones.java rename to algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/minimax/GameOfBones.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/minimax/MiniMax.java b/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/minimax/MiniMax.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/minimax/MiniMax.java rename to algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/minimax/MiniMax.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/minimax/Node.java b/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/minimax/Node.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/minimax/Node.java rename to algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/minimax/Node.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/minimax/Tree.java b/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/minimax/Tree.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/minimax/Tree.java rename to algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/minimax/Tree.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/multiswarm/Constants.java b/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/multiswarm/Constants.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/multiswarm/Constants.java rename to algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/multiswarm/Constants.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/multiswarm/FitnessFunction.java b/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/multiswarm/FitnessFunction.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/multiswarm/FitnessFunction.java rename to algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/multiswarm/FitnessFunction.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/multiswarm/Multiswarm.java b/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/multiswarm/Multiswarm.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/multiswarm/Multiswarm.java rename to algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/multiswarm/Multiswarm.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/multiswarm/Particle.java b/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/multiswarm/Particle.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/multiswarm/Particle.java rename to algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/multiswarm/Particle.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/multiswarm/Swarm.java b/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/multiswarm/Swarm.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/multiswarm/Swarm.java rename to algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/multiswarm/Swarm.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/string/EnglishAlphabetLetters.java b/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/string/EnglishAlphabetLetters.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/string/EnglishAlphabetLetters.java rename to algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/string/EnglishAlphabetLetters.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/string/search/StringSearchAlgorithms.java b/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/string/search/StringSearchAlgorithms.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/string/search/StringSearchAlgorithms.java rename to algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/string/search/StringSearchAlgorithms.java diff --git a/algorithms-miscellaneous-1/src/main/resources/logback.xml b/algorithms-miscellaneous-1/src/main/resources/logback.xml new file mode 100644 index 000000000000..7d900d8ea884 --- /dev/null +++ b/algorithms-miscellaneous-1/src/main/resources/logback.xml @@ -0,0 +1,13 @@ + + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + \ No newline at end of file diff --git a/algorithms/src/main/resources/maze/maze1.txt b/algorithms-miscellaneous-1/src/main/resources/maze/maze1.txt similarity index 92% rename from algorithms/src/main/resources/maze/maze1.txt rename to algorithms-miscellaneous-1/src/main/resources/maze/maze1.txt index 0a6309d25b93..8b48c325d2ed 100644 --- a/algorithms/src/main/resources/maze/maze1.txt +++ b/algorithms-miscellaneous-1/src/main/resources/maze/maze1.txt @@ -1,12 +1,12 @@ -S ######## -# # -# ### ## # -# # # # -# # # # # -# ## ##### -# # # -# # # # # -##### #### -# # E -# # # # +S ######## +# # +# ### ## # +# # # # +# # # # # +# ## ##### +# # # +# # # # # +##### #### +# # E +# # # # ########## \ No newline at end of file diff --git a/algorithms/src/main/resources/maze/maze2.txt b/algorithms-miscellaneous-1/src/main/resources/maze/maze2.txt similarity index 96% rename from algorithms/src/main/resources/maze/maze2.txt rename to algorithms-miscellaneous-1/src/main/resources/maze/maze2.txt index 22e6d0382a1a..df5b6bc66b41 100644 --- a/algorithms/src/main/resources/maze/maze2.txt +++ b/algorithms-miscellaneous-1/src/main/resources/maze/maze2.txt @@ -1,22 +1,22 @@ -S ########################## -# # # # -# # #### ############### # -# # # # # # -# # #### # # ############### -# # # # # # # -# # # #### ### ########### # -# # # # # # -# ################## # -######### # # # # # -# # #### # ####### # # -# # ### ### # # # # # -# # ## # ##### # # -##### ####### # # # # # -# # ## ## #### # # -# ##### ####### # # -# # ############ -####### ######### # # -# # ######## # -# ####### ###### ## # E -# # # ## # +S ########################## +# # # # +# # #### ############### # +# # # # # # +# # #### # # ############### +# # # # # # # +# # # #### ### ########### # +# # # # # # +# ################## # +######### # # # # # +# # #### # ####### # # +# # ### ### # # # # # +# # ## # ##### # # +##### ####### # # # # # +# # ## ## #### # # +# ##### ####### # # +# # ############ +####### ######### # # +# # ######## # +# ####### ###### ## # E +# # # ## # ############################ \ No newline at end of file diff --git a/algorithms/src/test/java/com/baeldung/algorithms/HillClimbingAlgorithmUnitTest.java b/algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/HillClimbingAlgorithmUnitTest.java similarity index 100% rename from algorithms/src/test/java/com/baeldung/algorithms/HillClimbingAlgorithmUnitTest.java rename to algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/HillClimbingAlgorithmUnitTest.java diff --git a/algorithms/src/test/java/com/baeldung/algorithms/MiddleElementLookupUnitTest.java b/algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/MiddleElementLookupUnitTest.java similarity index 100% rename from algorithms/src/test/java/com/baeldung/algorithms/MiddleElementLookupUnitTest.java rename to algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/MiddleElementLookupUnitTest.java diff --git a/algorithms/src/test/java/com/baeldung/algorithms/RtFiniteStateMachineLongRunningUnitTest.java b/algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/RtFiniteStateMachineLongRunningUnitTest.java similarity index 100% rename from algorithms/src/test/java/com/baeldung/algorithms/RtFiniteStateMachineLongRunningUnitTest.java rename to algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/RtFiniteStateMachineLongRunningUnitTest.java diff --git a/algorithms/src/test/java/com/baeldung/algorithms/StringSearchAlgorithmsUnitTest.java b/algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/StringSearchAlgorithmsUnitTest.java similarity index 100% rename from algorithms/src/test/java/com/baeldung/algorithms/StringSearchAlgorithmsUnitTest.java rename to algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/StringSearchAlgorithmsUnitTest.java diff --git a/algorithms/src/test/java/com/baeldung/algorithms/binarysearch/BinarySearchUnitTest.java b/algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/binarysearch/BinarySearchUnitTest.java similarity index 100% rename from algorithms/src/test/java/com/baeldung/algorithms/binarysearch/BinarySearchUnitTest.java rename to algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/binarysearch/BinarySearchUnitTest.java diff --git a/algorithms/src/test/java/com/baeldung/algorithms/kthlargest/FindKthLargestUnitTest.java b/algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/kthlargest/FindKthLargestUnitTest.java similarity index 100% rename from algorithms/src/test/java/com/baeldung/algorithms/kthlargest/FindKthLargestUnitTest.java rename to algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/kthlargest/FindKthLargestUnitTest.java diff --git a/algorithms/src/test/java/com/baeldung/algorithms/linesintersection/LinesIntersectionServiceUnitTest.java b/algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/linesintersection/LinesIntersectionServiceUnitTest.java similarity index 100% rename from algorithms/src/test/java/com/baeldung/algorithms/linesintersection/LinesIntersectionServiceUnitTest.java rename to algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/linesintersection/LinesIntersectionServiceUnitTest.java diff --git a/algorithms/src/test/java/com/baeldung/algorithms/mcts/MCTSUnitTest.java b/algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/mcts/MCTSUnitTest.java similarity index 100% rename from algorithms/src/test/java/com/baeldung/algorithms/mcts/MCTSUnitTest.java rename to algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/mcts/MCTSUnitTest.java diff --git a/algorithms/src/test/java/com/baeldung/algorithms/minimax/MinimaxUnitTest.java b/algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/minimax/MinimaxUnitTest.java similarity index 100% rename from algorithms/src/test/java/com/baeldung/algorithms/minimax/MinimaxUnitTest.java rename to algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/minimax/MinimaxUnitTest.java diff --git a/algorithms/src/test/java/com/baeldung/algorithms/multiswarm/LolFitnessFunction.java b/algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/multiswarm/LolFitnessFunction.java similarity index 100% rename from algorithms/src/test/java/com/baeldung/algorithms/multiswarm/LolFitnessFunction.java rename to algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/multiswarm/LolFitnessFunction.java diff --git a/algorithms/src/test/java/com/baeldung/algorithms/multiswarm/MultiswarmUnitTest.java b/algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/multiswarm/MultiswarmUnitTest.java similarity index 100% rename from algorithms/src/test/java/com/baeldung/algorithms/multiswarm/MultiswarmUnitTest.java rename to algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/multiswarm/MultiswarmUnitTest.java diff --git a/algorithms/src/test/java/com/baeldung/algorithms/string/EnglishAlphabetLettersUnitTest.java b/algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/string/EnglishAlphabetLettersUnitTest.java similarity index 100% rename from algorithms/src/test/java/com/baeldung/algorithms/string/EnglishAlphabetLettersUnitTest.java rename to algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/string/EnglishAlphabetLettersUnitTest.java diff --git a/algorithms/src/test/java/com/baeldung/algorithms/support/MayFailRule.java b/algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/support/MayFailRule.java similarity index 100% rename from algorithms/src/test/java/com/baeldung/algorithms/support/MayFailRule.java rename to algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/support/MayFailRule.java diff --git a/algorithms-miscellaneous-2/.gitignore b/algorithms-miscellaneous-2/.gitignore new file mode 100644 index 000000000000..30b2b7442c55 --- /dev/null +++ b/algorithms-miscellaneous-2/.gitignore @@ -0,0 +1,4 @@ +/target/ +.settings/ +.classpath +.project \ No newline at end of file diff --git a/algorithms/README.md b/algorithms-miscellaneous-2/README.md similarity index 54% rename from algorithms/README.md rename to algorithms-miscellaneous-2/README.md index b9a37a7bf222..2634fd6b56b2 100644 --- a/algorithms/README.md +++ b/algorithms-miscellaneous-2/README.md @@ -2,20 +2,8 @@ - [Dijkstra Algorithm in Java](http://www.baeldung.com/java-dijkstra) - [Introduction to Cobertura](http://www.baeldung.com/cobertura) -- [Ant Colony Optimization](http://www.baeldung.com/java-ant-colony-optimization) -- [Validating Input With Finite Automata in Java](http://www.baeldung.com/java-finite-automata) -- [Introduction to Jenetics Library](http://www.baeldung.com/jenetics) -- [Example of Hill Climbing Algorithm](http://www.baeldung.com/java-hill-climbing-algorithm) -- [Monte Carlo Tree Search for Tic-Tac-Toe Game](http://www.baeldung.com/java-monte-carlo-tree-search) -- [String Search Algorithms for Large Texts](http://www.baeldung.com/java-full-text-search-algorithms) - [Test a Linked List for Cyclicity](http://www.baeldung.com/java-linked-list-cyclicity) -- [Binary Search Algorithm in Java](http://www.baeldung.com/java-binary-search) -- [Bubble Sort in Java](http://www.baeldung.com/java-bubble-sort) - [Introduction to JGraphT](http://www.baeldung.com/jgrapht) -- [Introduction to Minimax Algorithm](http://www.baeldung.com/java-minimax-algorithm) -- [How to Calculate Levenshtein Distance in Java?](http://www.baeldung.com/java-levenshtein-distance) -- [How to Find the Kth Largest Element in Java](http://www.baeldung.com/java-kth-largest-element) -- [Multi-Swarm Optimization Algorithm in Java](http://www.baeldung.com/java-multi-swarm-algorithm) - [A Maze Solver in Java](http://www.baeldung.com/java-solve-maze) - [Create a Sudoku Solver in Java](http://www.baeldung.com/java-sudoku) - [Displaying Money Amounts in Words](http://www.baeldung.com/java-money-into-words) @@ -27,10 +15,6 @@ - [Check If Two Rectangles Overlap In Java](https://www.baeldung.com/java-check-if-two-rectangles-overlap) - [Calculate the Distance Between Two Points in Java](https://www.baeldung.com/java-distance-between-two-points) - [Find the Intersection of Two Lines in Java](https://www.baeldung.com/java-intersection-of-two-lines) -- [Check If a String Contains All The Letters of The Alphabet](https://www.baeldung.com/java-string-contains-all-letters) - [Round Up to the Nearest Hundred](https://www.baeldung.com/java-round-up-nearest-hundred) -- [Merge Sort in Java](https://www.baeldung.com/java-merge-sort) - [Calculate Percentage in Java](https://www.baeldung.com/java-calculate-percentage) -- [Quicksort Algorithm Implementation in Java](https://www.baeldung.com/java-quicksort) -- [Insertion Sort in Java](https://www.baeldung.com/java-insertion-sort) - [Converting Between Byte Arrays and Hexadecimal Strings in Java](https://www.baeldung.com/java-byte-arrays-hex-strings) diff --git a/algorithms-miscellaneous-2/pom.xml b/algorithms-miscellaneous-2/pom.xml new file mode 100644 index 000000000000..848399228eb7 --- /dev/null +++ b/algorithms-miscellaneous-2/pom.xml @@ -0,0 +1,96 @@ + + 4.0.0 + com.baeldung + algorithms-miscellaneous-2 + 0.0.1-SNAPSHOT + + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + + + + + org.apache.commons + commons-math3 + ${commons-math3.version} + + + commons-codec + commons-codec + ${commons-codec.version} + + + org.projectlombok + lombok + ${lombok.version} + provided + + + io.jenetics + jenetics + ${io.jenetics.version} + + + org.jgrapht + jgrapht-core + ${org.jgrapht.core.version} + + + pl.allegro.finance + tradukisto + ${tradukisto.version} + + + org.assertj + assertj-core + ${org.assertj.core.version} + test + + + + + + + + org.codehaus.mojo + exec-maven-plugin + ${exec-maven-plugin.version} + + + + + + + + + org.codehaus.mojo + cobertura-maven-plugin + 2.7 + + + + com/baeldung/algorithms/dijkstra/* + + + com/baeldung/algorithms/dijkstra/* + + + + + + + + + 1.16.12 + 3.6.1 + 1.0.1 + 3.7.0 + 1.0.1 + 3.9.0 + 1.11 + + + \ No newline at end of file diff --git a/algorithms-miscellaneous-2/roundUpToHundred/.gitignore b/algorithms-miscellaneous-2/roundUpToHundred/.gitignore new file mode 100644 index 000000000000..ae3c1726048c --- /dev/null +++ b/algorithms-miscellaneous-2/roundUpToHundred/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/algorithms-miscellaneous-2/roundUpToHundred/src/com/java/src/RoundUpToHundred.java b/algorithms-miscellaneous-2/roundUpToHundred/src/com/java/src/RoundUpToHundred.java new file mode 100644 index 000000000000..6c02a340d37f --- /dev/null +++ b/algorithms-miscellaneous-2/roundUpToHundred/src/com/java/src/RoundUpToHundred.java @@ -0,0 +1,20 @@ +package com.java.src; + +import java.util.Scanner; + +public class RoundUpToHundred { + + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + double input = scanner.nextDouble(); + scanner.close(); + + RoundUpToHundred.round(input); + } + + static long round(double input) { + long i = (long) Math.ceil(input); + return ((i + 99) / 100) * 100; + }; + +} diff --git a/algorithms-miscellaneous-2/roundUpToHundred/src/com/java/src/RoundUpToHundredTest.java b/algorithms-miscellaneous-2/roundUpToHundred/src/com/java/src/RoundUpToHundredTest.java new file mode 100644 index 000000000000..cb541ad49c43 --- /dev/null +++ b/algorithms-miscellaneous-2/roundUpToHundred/src/com/java/src/RoundUpToHundredTest.java @@ -0,0 +1,14 @@ +package com.java.src; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +public class RoundUpToHundredTest { + @Test + public void givenInput_whenRound_thenRoundUpToTheNearestHundred() { + assertEquals("Rounded up to hundred", 100, RoundUpToHundred.round(99)); + assertEquals("Rounded up to three hundred ", 300, RoundUpToHundred.round(200.2)); + assertEquals("Returns same rounded value", 400, RoundUpToHundred.round(400)); + } +} diff --git a/algorithms/src/main/java/com/baeldung/algorithms/conversion/HexStringConverter.java b/algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/conversion/HexStringConverter.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/conversion/HexStringConverter.java rename to algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/conversion/HexStringConverter.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/distancebetweenpoints/DistanceBetweenPointsService.java b/algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/distancebetweenpoints/DistanceBetweenPointsService.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/distancebetweenpoints/DistanceBetweenPointsService.java rename to algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/distancebetweenpoints/DistanceBetweenPointsService.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/editdistance/EditDistanceBase.java b/algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/editdistance/EditDistanceBase.java similarity index 95% rename from algorithms/src/main/java/com/baeldung/algorithms/editdistance/EditDistanceBase.java rename to algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/editdistance/EditDistanceBase.java index ec666219287c..4df1de999429 100644 --- a/algorithms/src/main/java/com/baeldung/algorithms/editdistance/EditDistanceBase.java +++ b/algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/editdistance/EditDistanceBase.java @@ -1,15 +1,15 @@ -package com.baeldung.algorithms.editdistance; - -import java.util.Arrays; - -public class EditDistanceBase { - - static int costOfSubstitution(char a, char b) { - return a == b ? 0 : 1; - } - - static int min(int... numbers) { - return Arrays.stream(numbers) - .min().orElse(Integer.MAX_VALUE); - } -} +package com.baeldung.algorithms.editdistance; + +import java.util.Arrays; + +public class EditDistanceBase { + + static int costOfSubstitution(char a, char b) { + return a == b ? 0 : 1; + } + + static int min(int... numbers) { + return Arrays.stream(numbers) + .min().orElse(Integer.MAX_VALUE); + } +} diff --git a/algorithms/src/main/java/com/baeldung/algorithms/editdistance/EditDistanceDynamicProgramming.java b/algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/editdistance/EditDistanceDynamicProgramming.java similarity index 96% rename from algorithms/src/main/java/com/baeldung/algorithms/editdistance/EditDistanceDynamicProgramming.java rename to algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/editdistance/EditDistanceDynamicProgramming.java index 1f8824c4f4bd..10ce43bf5fc2 100644 --- a/algorithms/src/main/java/com/baeldung/algorithms/editdistance/EditDistanceDynamicProgramming.java +++ b/algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/editdistance/EditDistanceDynamicProgramming.java @@ -1,26 +1,26 @@ -package com.baeldung.algorithms.editdistance; - -public class EditDistanceDynamicProgramming extends EditDistanceBase { - - static int calculate(String x, String y) { - int[][] dp = new int[x.length() + 1][y.length() + 1]; - - for (int i = 0; i <= x.length(); i++) { - for (int j = 0; j <= y.length(); j++) { - if (i == 0) - dp[i][j] = j; - - else if (j == 0) - dp[i][j] = i; - - else { - dp[i][j] = min(dp[i - 1][j - 1] - + costOfSubstitution(x.charAt(i - 1), y.charAt(j - 1)), - dp[i - 1][j] + 1, dp[i][j - 1] + 1); - } - } - } - - return dp[x.length()][y.length()]; - } -} +package com.baeldung.algorithms.editdistance; + +public class EditDistanceDynamicProgramming extends EditDistanceBase { + + static int calculate(String x, String y) { + int[][] dp = new int[x.length() + 1][y.length() + 1]; + + for (int i = 0; i <= x.length(); i++) { + for (int j = 0; j <= y.length(); j++) { + if (i == 0) + dp[i][j] = j; + + else if (j == 0) + dp[i][j] = i; + + else { + dp[i][j] = min(dp[i - 1][j - 1] + + costOfSubstitution(x.charAt(i - 1), y.charAt(j - 1)), + dp[i - 1][j] + 1, dp[i][j - 1] + 1); + } + } + } + + return dp[x.length()][y.length()]; + } +} diff --git a/algorithms/src/main/java/com/baeldung/algorithms/editdistance/EditDistanceRecursive.java b/algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/editdistance/EditDistanceRecursive.java similarity index 96% rename from algorithms/src/main/java/com/baeldung/algorithms/editdistance/EditDistanceRecursive.java rename to algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/editdistance/EditDistanceRecursive.java index 8ed48dc55422..fc907c45f8e4 100644 --- a/algorithms/src/main/java/com/baeldung/algorithms/editdistance/EditDistanceRecursive.java +++ b/algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/editdistance/EditDistanceRecursive.java @@ -1,21 +1,21 @@ -package com.baeldung.algorithms.editdistance; - -public class EditDistanceRecursive extends EditDistanceBase { - - static int calculate(String x, String y) { - - if (x.isEmpty()) { - return y.length(); - } - - if (y.isEmpty()) { - return x.length(); - } - - int substitution = calculate(x.substring(1), y.substring(1)) + costOfSubstitution(x.charAt(0), y.charAt(0)); - int insertion = calculate(x, y.substring(1)) + 1; - int deletion = calculate(x.substring(1), y) + 1; - - return min(substitution, insertion, deletion); - } -} +package com.baeldung.algorithms.editdistance; + +public class EditDistanceRecursive extends EditDistanceBase { + + static int calculate(String x, String y) { + + if (x.isEmpty()) { + return y.length(); + } + + if (y.isEmpty()) { + return x.length(); + } + + int substitution = calculate(x.substring(1), y.substring(1)) + costOfSubstitution(x.charAt(0), y.charAt(0)); + int insertion = calculate(x, y.substring(1)) + 1; + int deletion = calculate(x.substring(1), y) + 1; + + return min(substitution, insertion, deletion); + } +} diff --git a/algorithms/src/main/java/com/baeldung/algorithms/linkedlist/CycleDetectionBruteForce.java b/algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/linkedlist/CycleDetectionBruteForce.java similarity index 96% rename from algorithms/src/main/java/com/baeldung/algorithms/linkedlist/CycleDetectionBruteForce.java rename to algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/linkedlist/CycleDetectionBruteForce.java index 1df425ad2e5e..907bd9042dc0 100644 --- a/algorithms/src/main/java/com/baeldung/algorithms/linkedlist/CycleDetectionBruteForce.java +++ b/algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/linkedlist/CycleDetectionBruteForce.java @@ -1,38 +1,38 @@ -package com.baeldung.algorithms.linkedlist; - -public class CycleDetectionBruteForce { - - public static CycleDetectionResult detectCycle(Node head) { - if (head == null) { - return new CycleDetectionResult<>(false, null); - } - - Node it1 = head; - int nodesTraversedByOuter = 0; - while (it1 != null && it1.next != null) { - it1 = it1.next; - nodesTraversedByOuter++; - - int x = nodesTraversedByOuter; - Node it2 = head; - int noOfTimesCurrentNodeVisited = 0; - - while (x > 0) { - it2 = it2.next; - - if (it2 == it1) { - noOfTimesCurrentNodeVisited++; - } - - if (noOfTimesCurrentNodeVisited == 2) { - return new CycleDetectionResult<>(true, it1); - } - - x--; - } - } - - return new CycleDetectionResult<>(false, null); - } - -} +package com.baeldung.algorithms.linkedlist; + +public class CycleDetectionBruteForce { + + public static CycleDetectionResult detectCycle(Node head) { + if (head == null) { + return new CycleDetectionResult<>(false, null); + } + + Node it1 = head; + int nodesTraversedByOuter = 0; + while (it1 != null && it1.next != null) { + it1 = it1.next; + nodesTraversedByOuter++; + + int x = nodesTraversedByOuter; + Node it2 = head; + int noOfTimesCurrentNodeVisited = 0; + + while (x > 0) { + it2 = it2.next; + + if (it2 == it1) { + noOfTimesCurrentNodeVisited++; + } + + if (noOfTimesCurrentNodeVisited == 2) { + return new CycleDetectionResult<>(true, it1); + } + + x--; + } + } + + return new CycleDetectionResult<>(false, null); + } + +} diff --git a/algorithms/src/main/java/com/baeldung/algorithms/linkedlist/CycleDetectionByFastAndSlowIterators.java b/algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/linkedlist/CycleDetectionByFastAndSlowIterators.java similarity index 96% rename from algorithms/src/main/java/com/baeldung/algorithms/linkedlist/CycleDetectionByFastAndSlowIterators.java rename to algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/linkedlist/CycleDetectionByFastAndSlowIterators.java index ab088de44afb..2817f6f78350 100644 --- a/algorithms/src/main/java/com/baeldung/algorithms/linkedlist/CycleDetectionByFastAndSlowIterators.java +++ b/algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/linkedlist/CycleDetectionByFastAndSlowIterators.java @@ -1,25 +1,25 @@ -package com.baeldung.algorithms.linkedlist; - -public class CycleDetectionByFastAndSlowIterators { - - public static CycleDetectionResult detectCycle(Node head) { - if (head == null) { - return new CycleDetectionResult<>(false, null); - } - - Node slow = head; - Node fast = head; - - while (fast != null && fast.next != null) { - slow = slow.next; - fast = fast.next.next; - - if (slow == fast) { - return new CycleDetectionResult<>(true, fast); - } - } - - return new CycleDetectionResult<>(false, null); - } - -} +package com.baeldung.algorithms.linkedlist; + +public class CycleDetectionByFastAndSlowIterators { + + public static CycleDetectionResult detectCycle(Node head) { + if (head == null) { + return new CycleDetectionResult<>(false, null); + } + + Node slow = head; + Node fast = head; + + while (fast != null && fast.next != null) { + slow = slow.next; + fast = fast.next.next; + + if (slow == fast) { + return new CycleDetectionResult<>(true, fast); + } + } + + return new CycleDetectionResult<>(false, null); + } + +} diff --git a/algorithms/src/main/java/com/baeldung/algorithms/linkedlist/CycleDetectionByHashing.java b/algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/linkedlist/CycleDetectionByHashing.java similarity index 96% rename from algorithms/src/main/java/com/baeldung/algorithms/linkedlist/CycleDetectionByHashing.java rename to algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/linkedlist/CycleDetectionByHashing.java index 90d5ecd711c1..fba4cad2e625 100644 --- a/algorithms/src/main/java/com/baeldung/algorithms/linkedlist/CycleDetectionByHashing.java +++ b/algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/linkedlist/CycleDetectionByHashing.java @@ -1,27 +1,27 @@ -package com.baeldung.algorithms.linkedlist; - -import java.util.HashSet; -import java.util.Set; - -public class CycleDetectionByHashing { - - public static CycleDetectionResult detectCycle(Node head) { - if (head == null) { - return new CycleDetectionResult<>(false, null); - } - - Set> set = new HashSet<>(); - Node node = head; - - while (node != null) { - if (set.contains(node)) { - return new CycleDetectionResult<>(true, node); - } - set.add(node); - node = node.next; - } - - return new CycleDetectionResult<>(false, null); - } - -} +package com.baeldung.algorithms.linkedlist; + +import java.util.HashSet; +import java.util.Set; + +public class CycleDetectionByHashing { + + public static CycleDetectionResult detectCycle(Node head) { + if (head == null) { + return new CycleDetectionResult<>(false, null); + } + + Set> set = new HashSet<>(); + Node node = head; + + while (node != null) { + if (set.contains(node)) { + return new CycleDetectionResult<>(true, node); + } + set.add(node); + node = node.next; + } + + return new CycleDetectionResult<>(false, null); + } + +} diff --git a/algorithms/src/main/java/com/baeldung/algorithms/linkedlist/CycleDetectionResult.java b/algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/linkedlist/CycleDetectionResult.java similarity index 96% rename from algorithms/src/main/java/com/baeldung/algorithms/linkedlist/CycleDetectionResult.java rename to algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/linkedlist/CycleDetectionResult.java index e7556311b300..4e258ec2ef7a 100644 --- a/algorithms/src/main/java/com/baeldung/algorithms/linkedlist/CycleDetectionResult.java +++ b/algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/linkedlist/CycleDetectionResult.java @@ -1,12 +1,12 @@ -package com.baeldung.algorithms.linkedlist; - -public class CycleDetectionResult { - boolean cycleExists; - Node node; - - public CycleDetectionResult(boolean cycleExists, Node node) { - super(); - this.cycleExists = cycleExists; - this.node = node; - } -} +package com.baeldung.algorithms.linkedlist; + +public class CycleDetectionResult { + boolean cycleExists; + Node node; + + public CycleDetectionResult(boolean cycleExists, Node node) { + super(); + this.cycleExists = cycleExists; + this.node = node; + } +} diff --git a/algorithms/src/main/java/com/baeldung/algorithms/linkedlist/CycleRemovalBruteForce.java b/algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/linkedlist/CycleRemovalBruteForce.java similarity index 96% rename from algorithms/src/main/java/com/baeldung/algorithms/linkedlist/CycleRemovalBruteForce.java rename to algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/linkedlist/CycleRemovalBruteForce.java index a2bfaee9a160..216ebcdde3b2 100644 --- a/algorithms/src/main/java/com/baeldung/algorithms/linkedlist/CycleRemovalBruteForce.java +++ b/algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/linkedlist/CycleRemovalBruteForce.java @@ -1,56 +1,56 @@ -package com.baeldung.algorithms.linkedlist; - -public class CycleRemovalBruteForce { - - public static boolean detectAndRemoveCycle(Node head) { - CycleDetectionResult result = CycleDetectionByFastAndSlowIterators.detectCycle(head); - - if (result.cycleExists) { - removeCycle(result.node, head); - } - - return result.cycleExists; - } - - /** - * @param loopNodeParam - reference to the node where Flyods cycle - * finding algorithm ends, i.e. the fast and the slow iterators - * meet. - * @param head - reference to the head of the list - */ - private static void removeCycle(Node loopNodeParam, Node head) { - Node it = head; - - while (it != null) { - if (isNodeReachableFromLoopNode(it, loopNodeParam)) { - Node loopStart = it; - findEndNodeAndBreakCycle(loopStart); - break; - } - it = it.next; - } - } - - private static boolean isNodeReachableFromLoopNode(Node it, Node loopNodeParam) { - Node loopNode = loopNodeParam; - - do { - if (it == loopNode) { - return true; - } - loopNode = loopNode.next; - } while (loopNode.next != loopNodeParam); - - return false; - } - - private static void findEndNodeAndBreakCycle(Node loopStartParam) { - Node loopStart = loopStartParam; - - while (loopStart.next != loopStartParam) { - loopStart = loopStart.next; - } - - loopStart.next = null; - } -} +package com.baeldung.algorithms.linkedlist; + +public class CycleRemovalBruteForce { + + public static boolean detectAndRemoveCycle(Node head) { + CycleDetectionResult result = CycleDetectionByFastAndSlowIterators.detectCycle(head); + + if (result.cycleExists) { + removeCycle(result.node, head); + } + + return result.cycleExists; + } + + /** + * @param loopNodeParam - reference to the node where Flyods cycle + * finding algorithm ends, i.e. the fast and the slow iterators + * meet. + * @param head - reference to the head of the list + */ + private static void removeCycle(Node loopNodeParam, Node head) { + Node it = head; + + while (it != null) { + if (isNodeReachableFromLoopNode(it, loopNodeParam)) { + Node loopStart = it; + findEndNodeAndBreakCycle(loopStart); + break; + } + it = it.next; + } + } + + private static boolean isNodeReachableFromLoopNode(Node it, Node loopNodeParam) { + Node loopNode = loopNodeParam; + + do { + if (it == loopNode) { + return true; + } + loopNode = loopNode.next; + } while (loopNode.next != loopNodeParam); + + return false; + } + + private static void findEndNodeAndBreakCycle(Node loopStartParam) { + Node loopStart = loopStartParam; + + while (loopStart.next != loopStartParam) { + loopStart = loopStart.next; + } + + loopStart.next = null; + } +} diff --git a/algorithms/src/main/java/com/baeldung/algorithms/linkedlist/CycleRemovalByCountingLoopNodes.java b/algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/linkedlist/CycleRemovalByCountingLoopNodes.java similarity index 96% rename from algorithms/src/main/java/com/baeldung/algorithms/linkedlist/CycleRemovalByCountingLoopNodes.java rename to algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/linkedlist/CycleRemovalByCountingLoopNodes.java index d8db37fc4c60..f961feb97d63 100644 --- a/algorithms/src/main/java/com/baeldung/algorithms/linkedlist/CycleRemovalByCountingLoopNodes.java +++ b/algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/linkedlist/CycleRemovalByCountingLoopNodes.java @@ -1,44 +1,44 @@ -package com.baeldung.algorithms.linkedlist; - -public class CycleRemovalByCountingLoopNodes { - - public static boolean detectAndRemoveCycle(Node head) { - CycleDetectionResult result = CycleDetectionByFastAndSlowIterators.detectCycle(head); - - if (result.cycleExists) { - removeCycle(result.node, head); - } - - return result.cycleExists; - } - - private static void removeCycle(Node loopNodeParam, Node head) { - int cycleLength = calculateCycleLength(loopNodeParam); - Node cycleLengthAdvancedIterator = head; - Node it = head; - - for (int i = 0; i < cycleLength; i++) { - cycleLengthAdvancedIterator = cycleLengthAdvancedIterator.next; - } - - while (it.next != cycleLengthAdvancedIterator.next) { - it = it.next; - cycleLengthAdvancedIterator = cycleLengthAdvancedIterator.next; - } - - cycleLengthAdvancedIterator.next = null; - } - - private static int calculateCycleLength(Node loopNodeParam) { - Node loopNode = loopNodeParam; - int length = 1; - - while (loopNode.next != loopNodeParam) { - length++; - loopNode = loopNode.next; - } - - return length; - } - -} +package com.baeldung.algorithms.linkedlist; + +public class CycleRemovalByCountingLoopNodes { + + public static boolean detectAndRemoveCycle(Node head) { + CycleDetectionResult result = CycleDetectionByFastAndSlowIterators.detectCycle(head); + + if (result.cycleExists) { + removeCycle(result.node, head); + } + + return result.cycleExists; + } + + private static void removeCycle(Node loopNodeParam, Node head) { + int cycleLength = calculateCycleLength(loopNodeParam); + Node cycleLengthAdvancedIterator = head; + Node it = head; + + for (int i = 0; i < cycleLength; i++) { + cycleLengthAdvancedIterator = cycleLengthAdvancedIterator.next; + } + + while (it.next != cycleLengthAdvancedIterator.next) { + it = it.next; + cycleLengthAdvancedIterator = cycleLengthAdvancedIterator.next; + } + + cycleLengthAdvancedIterator.next = null; + } + + private static int calculateCycleLength(Node loopNodeParam) { + Node loopNode = loopNodeParam; + int length = 1; + + while (loopNode.next != loopNodeParam) { + length++; + loopNode = loopNode.next; + } + + return length; + } + +} diff --git a/algorithms/src/main/java/com/baeldung/algorithms/linkedlist/CycleRemovalWithoutCountingLoopNodes.java b/algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/linkedlist/CycleRemovalWithoutCountingLoopNodes.java similarity index 96% rename from algorithms/src/main/java/com/baeldung/algorithms/linkedlist/CycleRemovalWithoutCountingLoopNodes.java rename to algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/linkedlist/CycleRemovalWithoutCountingLoopNodes.java index b979f7f67755..1e41c832dbfb 100644 --- a/algorithms/src/main/java/com/baeldung/algorithms/linkedlist/CycleRemovalWithoutCountingLoopNodes.java +++ b/algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/linkedlist/CycleRemovalWithoutCountingLoopNodes.java @@ -1,27 +1,27 @@ -package com.baeldung.algorithms.linkedlist; - -public class CycleRemovalWithoutCountingLoopNodes { - - public static boolean detectAndRemoveCycle(Node head) { - CycleDetectionResult result = CycleDetectionByFastAndSlowIterators.detectCycle(head); - - if (result.cycleExists) { - removeCycle(result.node, head); - } - - return result.cycleExists; - } - - private static void removeCycle(Node meetingPointParam, Node head) { - Node loopNode = meetingPointParam; - Node it = head; - - while (loopNode.next != it.next) { - it = it.next; - loopNode = loopNode.next; - } - - loopNode.next = null; - } - -} +package com.baeldung.algorithms.linkedlist; + +public class CycleRemovalWithoutCountingLoopNodes { + + public static boolean detectAndRemoveCycle(Node head) { + CycleDetectionResult result = CycleDetectionByFastAndSlowIterators.detectCycle(head); + + if (result.cycleExists) { + removeCycle(result.node, head); + } + + return result.cycleExists; + } + + private static void removeCycle(Node meetingPointParam, Node head) { + Node loopNode = meetingPointParam; + Node it = head; + + while (loopNode.next != it.next) { + it = it.next; + loopNode = loopNode.next; + } + + loopNode.next = null; + } + +} diff --git a/algorithms/src/main/java/com/baeldung/algorithms/linkedlist/Node.java b/algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/linkedlist/Node.java similarity index 95% rename from algorithms/src/main/java/com/baeldung/algorithms/linkedlist/Node.java rename to algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/linkedlist/Node.java index 4add22c77d21..9573bcd981c8 100644 --- a/algorithms/src/main/java/com/baeldung/algorithms/linkedlist/Node.java +++ b/algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/linkedlist/Node.java @@ -1,38 +1,38 @@ -package com.baeldung.algorithms.linkedlist; - -public class Node { - T data; - Node next; - - public static Node createNewNode(T data, Node next) { - Node node = new Node(); - node.data = data; - node.next = next; - return node; - } - - public static void traverseList(Node root) { - if (root == null) { - return; - } - - Node node = root; - while (node != null) { - System.out.println(node.data); - node = node.next; - } - } - - public static Node getTail(Node root) { - if (root == null) { - return null; - } - - Node node = root; - while (node.next != null) { - node = node.next; - } - return node; - } - +package com.baeldung.algorithms.linkedlist; + +public class Node { + T data; + Node next; + + public static Node createNewNode(T data, Node next) { + Node node = new Node(); + node.data = data; + node.next = next; + return node; + } + + public static void traverseList(Node root) { + if (root == null) { + return; + } + + Node node = root; + while (node != null) { + System.out.println(node.data); + node = node.next; + } + } + + public static Node getTail(Node root) { + if (root == null) { + return null; + } + + Node node = root; + while (node.next != null) { + node = node.next; + } + return node; + } + } \ No newline at end of file diff --git a/algorithms/src/main/java/com/baeldung/algorithms/maze/solver/BFSMazeSolver.java b/algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/maze/solver/BFSMazeSolver.java similarity index 96% rename from algorithms/src/main/java/com/baeldung/algorithms/maze/solver/BFSMazeSolver.java rename to algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/maze/solver/BFSMazeSolver.java index 08972251b86c..0e3101925c40 100644 --- a/algorithms/src/main/java/com/baeldung/algorithms/maze/solver/BFSMazeSolver.java +++ b/algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/maze/solver/BFSMazeSolver.java @@ -1,52 +1,52 @@ -package com.baeldung.algorithms.maze.solver; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.LinkedList; -import java.util.List; - -public class BFSMazeSolver { - private static final int[][] DIRECTIONS = { { 0, 1 }, { 1, 0 }, { 0, -1 }, { -1, 0 } }; - - public List solve(Maze maze) { - LinkedList nextToVisit = new LinkedList<>(); - Coordinate start = maze.getEntry(); - nextToVisit.add(start); - - while (!nextToVisit.isEmpty()) { - Coordinate cur = nextToVisit.remove(); - - if (!maze.isValidLocation(cur.getX(), cur.getY()) || maze.isExplored(cur.getX(), cur.getY())) { - continue; - } - - if (maze.isWall(cur.getX(), cur.getY())) { - maze.setVisited(cur.getX(), cur.getY(), true); - continue; - } - - if (maze.isExit(cur.getX(), cur.getY())) { - return backtrackPath(cur); - } - - for (int[] direction : DIRECTIONS) { - Coordinate coordinate = new Coordinate(cur.getX() + direction[0], cur.getY() + direction[1], cur); - nextToVisit.add(coordinate); - maze.setVisited(cur.getX(), cur.getY(), true); - } - } - return Collections.emptyList(); - } - - private List backtrackPath(Coordinate cur) { - List path = new ArrayList<>(); - Coordinate iter = cur; - - while (iter != null) { - path.add(iter); - iter = iter.parent; - } - - return path; - } -} +package com.baeldung.algorithms.maze.solver; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.LinkedList; +import java.util.List; + +public class BFSMazeSolver { + private static final int[][] DIRECTIONS = { { 0, 1 }, { 1, 0 }, { 0, -1 }, { -1, 0 } }; + + public List solve(Maze maze) { + LinkedList nextToVisit = new LinkedList<>(); + Coordinate start = maze.getEntry(); + nextToVisit.add(start); + + while (!nextToVisit.isEmpty()) { + Coordinate cur = nextToVisit.remove(); + + if (!maze.isValidLocation(cur.getX(), cur.getY()) || maze.isExplored(cur.getX(), cur.getY())) { + continue; + } + + if (maze.isWall(cur.getX(), cur.getY())) { + maze.setVisited(cur.getX(), cur.getY(), true); + continue; + } + + if (maze.isExit(cur.getX(), cur.getY())) { + return backtrackPath(cur); + } + + for (int[] direction : DIRECTIONS) { + Coordinate coordinate = new Coordinate(cur.getX() + direction[0], cur.getY() + direction[1], cur); + nextToVisit.add(coordinate); + maze.setVisited(cur.getX(), cur.getY(), true); + } + } + return Collections.emptyList(); + } + + private List backtrackPath(Coordinate cur) { + List path = new ArrayList<>(); + Coordinate iter = cur; + + while (iter != null) { + path.add(iter); + iter = iter.parent; + } + + return path; + } +} diff --git a/algorithms/src/main/java/com/baeldung/algorithms/maze/solver/Coordinate.java b/algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/maze/solver/Coordinate.java similarity index 94% rename from algorithms/src/main/java/com/baeldung/algorithms/maze/solver/Coordinate.java rename to algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/maze/solver/Coordinate.java index 09b2ced5e673..8202c890765d 100644 --- a/algorithms/src/main/java/com/baeldung/algorithms/maze/solver/Coordinate.java +++ b/algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/maze/solver/Coordinate.java @@ -1,31 +1,31 @@ -package com.baeldung.algorithms.maze.solver; - -public class Coordinate { - int x; - int y; - Coordinate parent; - - public Coordinate(int x, int y) { - this.x = x; - this.y = y; - this.parent = null; - } - - public Coordinate(int x, int y, Coordinate parent) { - this.x = x; - this.y = y; - this.parent = parent; - } - - int getX() { - return x; - } - - int getY() { - return y; - } - - Coordinate getParent() { - return parent; - } -} +package com.baeldung.algorithms.maze.solver; + +public class Coordinate { + int x; + int y; + Coordinate parent; + + public Coordinate(int x, int y) { + this.x = x; + this.y = y; + this.parent = null; + } + + public Coordinate(int x, int y, Coordinate parent) { + this.x = x; + this.y = y; + this.parent = parent; + } + + int getX() { + return x; + } + + int getY() { + return y; + } + + Coordinate getParent() { + return parent; + } +} diff --git a/algorithms/src/main/java/com/baeldung/algorithms/maze/solver/DFSMazeSolver.java b/algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/maze/solver/DFSMazeSolver.java similarity index 96% rename from algorithms/src/main/java/com/baeldung/algorithms/maze/solver/DFSMazeSolver.java rename to algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/maze/solver/DFSMazeSolver.java index f9640066b941..ee821631db32 100644 --- a/algorithms/src/main/java/com/baeldung/algorithms/maze/solver/DFSMazeSolver.java +++ b/algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/maze/solver/DFSMazeSolver.java @@ -1,48 +1,48 @@ -package com.baeldung.algorithms.maze.solver; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -public class DFSMazeSolver { - private static final int[][] DIRECTIONS = { { 0, 1 }, { 1, 0 }, { 0, -1 }, { -1, 0 } }; - - public List solve(Maze maze) { - List path = new ArrayList<>(); - if (explore(maze, maze.getEntry() - .getX(), - maze.getEntry() - .getY(), - path)) { - return path; - } - return Collections.emptyList(); - } - - private boolean explore(Maze maze, int row, int col, List path) { - if (!maze.isValidLocation(row, col) || maze.isWall(row, col) || maze.isExplored(row, col)) { - return false; - } - - path.add(new Coordinate(row, col)); - maze.setVisited(row, col, true); - - if (maze.isExit(row, col)) { - return true; - } - - for (int[] direction : DIRECTIONS) { - Coordinate coordinate = getNextCoordinate(row, col, direction[0], direction[1]); - if (explore(maze, coordinate.getX(), coordinate.getY(), path)) { - return true; - } - } - - path.remove(path.size() - 1); - return false; - } - - private Coordinate getNextCoordinate(int row, int col, int i, int j) { - return new Coordinate(row + i, col + j); - } -} +package com.baeldung.algorithms.maze.solver; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class DFSMazeSolver { + private static final int[][] DIRECTIONS = { { 0, 1 }, { 1, 0 }, { 0, -1 }, { -1, 0 } }; + + public List solve(Maze maze) { + List path = new ArrayList<>(); + if (explore(maze, maze.getEntry() + .getX(), + maze.getEntry() + .getY(), + path)) { + return path; + } + return Collections.emptyList(); + } + + private boolean explore(Maze maze, int row, int col, List path) { + if (!maze.isValidLocation(row, col) || maze.isWall(row, col) || maze.isExplored(row, col)) { + return false; + } + + path.add(new Coordinate(row, col)); + maze.setVisited(row, col, true); + + if (maze.isExit(row, col)) { + return true; + } + + for (int[] direction : DIRECTIONS) { + Coordinate coordinate = getNextCoordinate(row, col, direction[0], direction[1]); + if (explore(maze, coordinate.getX(), coordinate.getY(), path)) { + return true; + } + } + + path.remove(path.size() - 1); + return false; + } + + private Coordinate getNextCoordinate(int row, int col, int i, int j) { + return new Coordinate(row + i, col + j); + } +} diff --git a/algorithms/src/main/java/com/baeldung/algorithms/maze/solver/Maze.java b/algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/maze/solver/Maze.java similarity index 96% rename from algorithms/src/main/java/com/baeldung/algorithms/maze/solver/Maze.java rename to algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/maze/solver/Maze.java index 8aaa44d9b1d0..d0a0ed65d91c 100644 --- a/algorithms/src/main/java/com/baeldung/algorithms/maze/solver/Maze.java +++ b/algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/maze/solver/Maze.java @@ -1,141 +1,141 @@ -package com.baeldung.algorithms.maze.solver; - -import java.io.File; -import java.io.FileNotFoundException; -import java.util.Arrays; -import java.util.List; -import java.util.Scanner; - -public class Maze { - private static final int ROAD = 0; - private static final int WALL = 1; - private static final int START = 2; - private static final int EXIT = 3; - private static final int PATH = 4; - - private int[][] maze; - private boolean[][] visited; - private Coordinate start; - private Coordinate end; - - public Maze(File maze) throws FileNotFoundException { - String fileText = ""; - try (Scanner input = new Scanner(maze)) { - while (input.hasNextLine()) { - fileText += input.nextLine() + "\n"; - } - } - initializeMaze(fileText); - } - - private void initializeMaze(String text) { - if (text == null || (text = text.trim()).length() == 0) { - throw new IllegalArgumentException("empty lines data"); - } - - String[] lines = text.split("[\r]?\n"); - maze = new int[lines.length][lines[0].length()]; - visited = new boolean[lines.length][lines[0].length()]; - - for (int row = 0; row < getHeight(); row++) { - if (lines[row].length() != getWidth()) { - throw new IllegalArgumentException("line " + (row + 1) + " wrong length (was " + lines[row].length() + " but should be " + getWidth() + ")"); - } - - for (int col = 0; col < getWidth(); col++) { - if (lines[row].charAt(col) == '#') - maze[row][col] = WALL; - else if (lines[row].charAt(col) == 'S') { - maze[row][col] = START; - start = new Coordinate(row, col); - } else if (lines[row].charAt(col) == 'E') { - maze[row][col] = EXIT; - end = new Coordinate(row, col); - } else - maze[row][col] = ROAD; - } - } - } - - public int getHeight() { - return maze.length; - } - - public int getWidth() { - return maze[0].length; - } - - public Coordinate getEntry() { - return start; - } - - public Coordinate getExit() { - return end; - } - - public boolean isExit(int x, int y) { - return x == end.getX() && y == end.getY(); - } - - public boolean isStart(int x, int y) { - return x == start.getX() && y == start.getY(); - } - - public boolean isExplored(int row, int col) { - return visited[row][col]; - } - - public boolean isWall(int row, int col) { - return maze[row][col] == WALL; - } - - public void setVisited(int row, int col, boolean value) { - visited[row][col] = value; - } - - public boolean isValidLocation(int row, int col) { - if (row < 0 || row >= getHeight() || col < 0 || col >= getWidth()) { - return false; - } - return true; - } - - public void printPath(List path) { - int[][] tempMaze = Arrays.stream(maze) - .map(int[]::clone) - .toArray(int[][]::new); - for (Coordinate coordinate : path) { - if (isStart(coordinate.getX(), coordinate.getY()) || isExit(coordinate.getX(), coordinate.getY())) { - continue; - } - tempMaze[coordinate.getX()][coordinate.getY()] = PATH; - } - System.out.println(toString(tempMaze)); - } - - public String toString(int[][] maze) { - StringBuilder result = new StringBuilder(getWidth() * (getHeight() + 1)); - for (int row = 0; row < getHeight(); row++) { - for (int col = 0; col < getWidth(); col++) { - if (maze[row][col] == ROAD) { - result.append(' '); - } else if (maze[row][col] == WALL) { - result.append('#'); - } else if (maze[row][col] == START) { - result.append('S'); - } else if (maze[row][col] == EXIT) { - result.append('E'); - } else { - result.append('.'); - } - } - result.append('\n'); - } - return result.toString(); - } - - public void reset() { - for (int i = 0; i < visited.length; i++) - Arrays.fill(visited[i], false); - } -} +package com.baeldung.algorithms.maze.solver; + +import java.io.File; +import java.io.FileNotFoundException; +import java.util.Arrays; +import java.util.List; +import java.util.Scanner; + +public class Maze { + private static final int ROAD = 0; + private static final int WALL = 1; + private static final int START = 2; + private static final int EXIT = 3; + private static final int PATH = 4; + + private int[][] maze; + private boolean[][] visited; + private Coordinate start; + private Coordinate end; + + public Maze(File maze) throws FileNotFoundException { + String fileText = ""; + try (Scanner input = new Scanner(maze)) { + while (input.hasNextLine()) { + fileText += input.nextLine() + "\n"; + } + } + initializeMaze(fileText); + } + + private void initializeMaze(String text) { + if (text == null || (text = text.trim()).length() == 0) { + throw new IllegalArgumentException("empty lines data"); + } + + String[] lines = text.split("[\r]?\n"); + maze = new int[lines.length][lines[0].length()]; + visited = new boolean[lines.length][lines[0].length()]; + + for (int row = 0; row < getHeight(); row++) { + if (lines[row].length() != getWidth()) { + throw new IllegalArgumentException("line " + (row + 1) + " wrong length (was " + lines[row].length() + " but should be " + getWidth() + ")"); + } + + for (int col = 0; col < getWidth(); col++) { + if (lines[row].charAt(col) == '#') + maze[row][col] = WALL; + else if (lines[row].charAt(col) == 'S') { + maze[row][col] = START; + start = new Coordinate(row, col); + } else if (lines[row].charAt(col) == 'E') { + maze[row][col] = EXIT; + end = new Coordinate(row, col); + } else + maze[row][col] = ROAD; + } + } + } + + public int getHeight() { + return maze.length; + } + + public int getWidth() { + return maze[0].length; + } + + public Coordinate getEntry() { + return start; + } + + public Coordinate getExit() { + return end; + } + + public boolean isExit(int x, int y) { + return x == end.getX() && y == end.getY(); + } + + public boolean isStart(int x, int y) { + return x == start.getX() && y == start.getY(); + } + + public boolean isExplored(int row, int col) { + return visited[row][col]; + } + + public boolean isWall(int row, int col) { + return maze[row][col] == WALL; + } + + public void setVisited(int row, int col, boolean value) { + visited[row][col] = value; + } + + public boolean isValidLocation(int row, int col) { + if (row < 0 || row >= getHeight() || col < 0 || col >= getWidth()) { + return false; + } + return true; + } + + public void printPath(List path) { + int[][] tempMaze = Arrays.stream(maze) + .map(int[]::clone) + .toArray(int[][]::new); + for (Coordinate coordinate : path) { + if (isStart(coordinate.getX(), coordinate.getY()) || isExit(coordinate.getX(), coordinate.getY())) { + continue; + } + tempMaze[coordinate.getX()][coordinate.getY()] = PATH; + } + System.out.println(toString(tempMaze)); + } + + public String toString(int[][] maze) { + StringBuilder result = new StringBuilder(getWidth() * (getHeight() + 1)); + for (int row = 0; row < getHeight(); row++) { + for (int col = 0; col < getWidth(); col++) { + if (maze[row][col] == ROAD) { + result.append(' '); + } else if (maze[row][col] == WALL) { + result.append('#'); + } else if (maze[row][col] == START) { + result.append('S'); + } else if (maze[row][col] == EXIT) { + result.append('E'); + } else { + result.append('.'); + } + } + result.append('\n'); + } + return result.toString(); + } + + public void reset() { + for (int i = 0; i < visited.length; i++) + Arrays.fill(visited[i], false); + } +} diff --git a/algorithms/src/main/java/com/baeldung/algorithms/maze/solver/MazeDriver.java b/algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/maze/solver/MazeDriver.java similarity index 96% rename from algorithms/src/main/java/com/baeldung/algorithms/maze/solver/MazeDriver.java rename to algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/maze/solver/MazeDriver.java index 60263deba326..a47c3c858190 100644 --- a/algorithms/src/main/java/com/baeldung/algorithms/maze/solver/MazeDriver.java +++ b/algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/maze/solver/MazeDriver.java @@ -1,34 +1,34 @@ -package com.baeldung.algorithms.maze.solver; - -import java.io.File; -import java.util.List; - -public class MazeDriver { - public static void main(String[] args) throws Exception { - File maze1 = new File("src/main/resources/maze/maze1.txt"); - File maze2 = new File("src/main/resources/maze/maze2.txt"); - - execute(maze1); - execute(maze2); - } - - private static void execute(File file) throws Exception { - Maze maze = new Maze(file); - dfs(maze); - bfs(maze); - } - - private static void bfs(Maze maze) { - BFSMazeSolver bfs = new BFSMazeSolver(); - List path = bfs.solve(maze); - maze.printPath(path); - maze.reset(); - } - - private static void dfs(Maze maze) { - DFSMazeSolver dfs = new DFSMazeSolver(); - List path = dfs.solve(maze); - maze.printPath(path); - maze.reset(); - } -} +package com.baeldung.algorithms.maze.solver; + +import java.io.File; +import java.util.List; + +public class MazeDriver { + public static void main(String[] args) throws Exception { + File maze1 = new File("src/main/resources/maze/maze1.txt"); + File maze2 = new File("src/main/resources/maze/maze2.txt"); + + execute(maze1); + execute(maze2); + } + + private static void execute(File file) throws Exception { + Maze maze = new Maze(file); + dfs(maze); + bfs(maze); + } + + private static void bfs(Maze maze) { + BFSMazeSolver bfs = new BFSMazeSolver(); + List path = bfs.solve(maze); + maze.printPath(path); + maze.reset(); + } + + private static void dfs(Maze maze) { + DFSMazeSolver dfs = new DFSMazeSolver(); + List path = dfs.solve(maze); + maze.printPath(path); + maze.reset(); + } +} diff --git a/algorithms/src/main/java/com/baeldung/algorithms/numberwordconverter/NumberWordConverter.java b/algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/numberwordconverter/NumberWordConverter.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/numberwordconverter/NumberWordConverter.java rename to algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/numberwordconverter/NumberWordConverter.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/rectanglesoverlap/Point.java b/algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/rectanglesoverlap/Point.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/rectanglesoverlap/Point.java rename to algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/rectanglesoverlap/Point.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/rectanglesoverlap/Rectangle.java b/algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/rectanglesoverlap/Rectangle.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/rectanglesoverlap/Rectangle.java rename to algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/rectanglesoverlap/Rectangle.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/romannumerals/RomanArabicConverter.java b/algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/romannumerals/RomanArabicConverter.java similarity index 96% rename from algorithms/src/main/java/com/baeldung/algorithms/romannumerals/RomanArabicConverter.java rename to algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/romannumerals/RomanArabicConverter.java index ab0922ecf45f..acd275e60942 100644 --- a/algorithms/src/main/java/com/baeldung/algorithms/romannumerals/RomanArabicConverter.java +++ b/algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/romannumerals/RomanArabicConverter.java @@ -1,52 +1,52 @@ -package com.baeldung.algorithms.romannumerals; - -import java.util.List; - -class RomanArabicConverter { - - public static int romanToArabic(String input) { - String romanNumeral = input.toUpperCase(); - int result = 0; - - List romanNumerals = RomanNumeral.getReverseSortedValues(); - - int i = 0; - - while ((romanNumeral.length() > 0) && (i < romanNumerals.size())) { - RomanNumeral symbol = romanNumerals.get(i); - if (romanNumeral.startsWith(symbol.name())) { - result += symbol.getValue(); - romanNumeral = romanNumeral.substring(symbol.name().length()); - } else { - i++; - } - } - if (romanNumeral.length() > 0) { - throw new IllegalArgumentException(input + " cannot be converted to a Roman Numeral"); - } - - return result; - } - - public static String arabicToRoman(int number) { - if ((number <= 0) || (number > 4000)) { - throw new IllegalArgumentException(number + " is not in range (0,4000]"); - } - - List romanNumerals = RomanNumeral.getReverseSortedValues(); - - int i = 0; - StringBuilder sb = new StringBuilder(); - - while (number > 0 && i < romanNumerals.size()) { - RomanNumeral currentSymbol = romanNumerals.get(i); - if (currentSymbol.getValue() <= number) { - sb.append(currentSymbol.name()); - number -= currentSymbol.getValue(); - } else { - i++; - } - } - return sb.toString(); - } -} +package com.baeldung.algorithms.romannumerals; + +import java.util.List; + +class RomanArabicConverter { + + public static int romanToArabic(String input) { + String romanNumeral = input.toUpperCase(); + int result = 0; + + List romanNumerals = RomanNumeral.getReverseSortedValues(); + + int i = 0; + + while ((romanNumeral.length() > 0) && (i < romanNumerals.size())) { + RomanNumeral symbol = romanNumerals.get(i); + if (romanNumeral.startsWith(symbol.name())) { + result += symbol.getValue(); + romanNumeral = romanNumeral.substring(symbol.name().length()); + } else { + i++; + } + } + if (romanNumeral.length() > 0) { + throw new IllegalArgumentException(input + " cannot be converted to a Roman Numeral"); + } + + return result; + } + + public static String arabicToRoman(int number) { + if ((number <= 0) || (number > 4000)) { + throw new IllegalArgumentException(number + " is not in range (0,4000]"); + } + + List romanNumerals = RomanNumeral.getReverseSortedValues(); + + int i = 0; + StringBuilder sb = new StringBuilder(); + + while (number > 0 && i < romanNumerals.size()) { + RomanNumeral currentSymbol = romanNumerals.get(i); + if (currentSymbol.getValue() <= number) { + sb.append(currentSymbol.name()); + number -= currentSymbol.getValue(); + } else { + i++; + } + } + return sb.toString(); + } +} diff --git a/algorithms/src/main/java/com/baeldung/algorithms/romannumerals/RomanNumeral.java b/algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/romannumerals/RomanNumeral.java similarity index 96% rename from algorithms/src/main/java/com/baeldung/algorithms/romannumerals/RomanNumeral.java rename to algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/romannumerals/RomanNumeral.java index 219f0b509077..2ee5bb6d75f7 100644 --- a/algorithms/src/main/java/com/baeldung/algorithms/romannumerals/RomanNumeral.java +++ b/algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/romannumerals/RomanNumeral.java @@ -1,26 +1,26 @@ -package com.baeldung.algorithms.romannumerals; - -import java.util.Arrays; -import java.util.Comparator; -import java.util.List; -import java.util.stream.Collectors; - -enum RomanNumeral { - I(1), IV(4), V(5), IX(9), X(10), XL(40), L(50), XC(90), C(100), CD(400), D(500), CM(900), M(1000); - - private int value; - - RomanNumeral(int value) { - this.value = value; - } - - public int getValue() { - return value; - } - - public static List getReverseSortedValues() { - return Arrays.stream(values()) - .sorted(Comparator.comparing((RomanNumeral e) -> e.value).reversed()) - .collect(Collectors.toList()); - } -} +package com.baeldung.algorithms.romannumerals; + +import java.util.Arrays; +import java.util.Comparator; +import java.util.List; +import java.util.stream.Collectors; + +enum RomanNumeral { + I(1), IV(4), V(5), IX(9), X(10), XL(40), L(50), XC(90), C(100), CD(400), D(500), CM(900), M(1000); + + private int value; + + RomanNumeral(int value) { + this.value = value; + } + + public int getValue() { + return value; + } + + public static List getReverseSortedValues() { + return Arrays.stream(values()) + .sorted(Comparator.comparing((RomanNumeral e) -> e.value).reversed()) + .collect(Collectors.toList()); + } +} diff --git a/algorithms/src/main/java/com/baeldung/algorithms/sudoku/BacktrackingAlgorithm.java b/algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/sudoku/BacktrackingAlgorithm.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/sudoku/BacktrackingAlgorithm.java rename to algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/sudoku/BacktrackingAlgorithm.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/sudoku/ColumnNode.java b/algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/sudoku/ColumnNode.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/sudoku/ColumnNode.java rename to algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/sudoku/ColumnNode.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/sudoku/DancingLinks.java b/algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/sudoku/DancingLinks.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/sudoku/DancingLinks.java rename to algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/sudoku/DancingLinks.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/sudoku/DancingLinksAlgorithm.java b/algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/sudoku/DancingLinksAlgorithm.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/sudoku/DancingLinksAlgorithm.java rename to algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/sudoku/DancingLinksAlgorithm.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/sudoku/DancingNode.java b/algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/sudoku/DancingNode.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/sudoku/DancingNode.java rename to algorithms-miscellaneous-2/src/main/java/com/baeldung/algorithms/sudoku/DancingNode.java diff --git a/algorithms-miscellaneous-2/src/main/resources/logback.xml b/algorithms-miscellaneous-2/src/main/resources/logback.xml new file mode 100644 index 000000000000..7d900d8ea884 --- /dev/null +++ b/algorithms-miscellaneous-2/src/main/resources/logback.xml @@ -0,0 +1,13 @@ + + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + \ No newline at end of file diff --git a/algorithms-miscellaneous-2/src/main/resources/maze/maze1.txt b/algorithms-miscellaneous-2/src/main/resources/maze/maze1.txt new file mode 100644 index 000000000000..8b48c325d2ed --- /dev/null +++ b/algorithms-miscellaneous-2/src/main/resources/maze/maze1.txt @@ -0,0 +1,12 @@ +S ######## +# # +# ### ## # +# # # # +# # # # # +# ## ##### +# # # +# # # # # +##### #### +# # E +# # # # +########## \ No newline at end of file diff --git a/algorithms-miscellaneous-2/src/main/resources/maze/maze2.txt b/algorithms-miscellaneous-2/src/main/resources/maze/maze2.txt new file mode 100644 index 000000000000..df5b6bc66b41 --- /dev/null +++ b/algorithms-miscellaneous-2/src/main/resources/maze/maze2.txt @@ -0,0 +1,22 @@ +S ########################## +# # # # +# # #### ############### # +# # # # # # +# # #### # # ############### +# # # # # # # +# # # #### ### ########### # +# # # # # # +# ################## # +######### # # # # # +# # #### # ####### # # +# # ### ### # # # # # +# # ## # ##### # # +##### ####### # # # # # +# # ## ## #### # # +# ##### ####### # # +# # ############ +####### ######### # # +# # ######## # +# ####### ###### ## # E +# # # ## # +############################ \ No newline at end of file diff --git a/algorithms/src/test/java/com/baeldung/algorithms/analysis/AnalysisRunnerLiveTest.java b/algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/analysis/AnalysisRunnerLiveTest.java similarity index 100% rename from algorithms/src/test/java/com/baeldung/algorithms/analysis/AnalysisRunnerLiveTest.java rename to algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/analysis/AnalysisRunnerLiveTest.java diff --git a/algorithms/src/test/java/com/baeldung/algorithms/conversion/ByteArrayConverterUnitTest.java b/algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/conversion/ByteArrayConverterUnitTest.java similarity index 100% rename from algorithms/src/test/java/com/baeldung/algorithms/conversion/ByteArrayConverterUnitTest.java rename to algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/conversion/ByteArrayConverterUnitTest.java diff --git a/algorithms/src/test/java/com/baeldung/algorithms/distancebetweenpoints/DistanceBetweenPointsServiceUnitTest.java b/algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/distancebetweenpoints/DistanceBetweenPointsServiceUnitTest.java similarity index 100% rename from algorithms/src/test/java/com/baeldung/algorithms/distancebetweenpoints/DistanceBetweenPointsServiceUnitTest.java rename to algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/distancebetweenpoints/DistanceBetweenPointsServiceUnitTest.java diff --git a/algorithms/src/test/java/com/baeldung/algorithms/editdistance/EditDistanceDataProvider.java b/algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/editdistance/EditDistanceDataProvider.java similarity index 96% rename from algorithms/src/test/java/com/baeldung/algorithms/editdistance/EditDistanceDataProvider.java rename to algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/editdistance/EditDistanceDataProvider.java index 89bd8716166a..d11da6119166 100644 --- a/algorithms/src/test/java/com/baeldung/algorithms/editdistance/EditDistanceDataProvider.java +++ b/algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/editdistance/EditDistanceDataProvider.java @@ -1,21 +1,21 @@ -package com.baeldung.algorithms.editdistance; - -import org.junit.runners.Parameterized.Parameters; - -import java.util.Arrays; -import java.util.Collection; - -public class EditDistanceDataProvider { - - @Parameters - public static Collection getLists() { - return Arrays.asList(new Object[][] { - { "", "", 0 }, - { "ago", "", 3 }, - { "", "do", 2 }, - { "abc", "adc", 1 }, - { "peek", "pesek", 1 }, - { "sunday", "saturday", 3 } - }); - } -} +package com.baeldung.algorithms.editdistance; + +import org.junit.runners.Parameterized.Parameters; + +import java.util.Arrays; +import java.util.Collection; + +public class EditDistanceDataProvider { + + @Parameters + public static Collection getLists() { + return Arrays.asList(new Object[][] { + { "", "", 0 }, + { "ago", "", 3 }, + { "", "do", 2 }, + { "abc", "adc", 1 }, + { "peek", "pesek", 1 }, + { "sunday", "saturday", 3 } + }); + } +} diff --git a/algorithms/src/test/java/com/baeldung/algorithms/editdistance/EditDistanceUnitTest.java b/algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/editdistance/EditDistanceUnitTest.java similarity index 96% rename from algorithms/src/test/java/com/baeldung/algorithms/editdistance/EditDistanceUnitTest.java rename to algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/editdistance/EditDistanceUnitTest.java index 0df4715b80cd..3dd63e86ab8c 100644 --- a/algorithms/src/test/java/com/baeldung/algorithms/editdistance/EditDistanceUnitTest.java +++ b/algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/editdistance/EditDistanceUnitTest.java @@ -1,32 +1,32 @@ -package com.baeldung.algorithms.editdistance; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; - -import static org.junit.Assert.assertEquals; - -@RunWith(Parameterized.class) -public class EditDistanceUnitTest extends EditDistanceDataProvider { - - private String x; - private String y; - private int result; - - public EditDistanceUnitTest(String a, String b, int res) { - super(); - x = a; - y = b; - result = res; - } - - @Test - public void testEditDistance_RecursiveImplementation() { - assertEquals(result, EditDistanceRecursive.calculate(x, y)); - } - - @Test - public void testEditDistance_givenDynamicProgrammingImplementation() { - assertEquals(result, EditDistanceDynamicProgramming.calculate(x, y)); - } -} +package com.baeldung.algorithms.editdistance; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import static org.junit.Assert.assertEquals; + +@RunWith(Parameterized.class) +public class EditDistanceUnitTest extends EditDistanceDataProvider { + + private String x; + private String y; + private int result; + + public EditDistanceUnitTest(String a, String b, int res) { + super(); + x = a; + y = b; + result = res; + } + + @Test + public void testEditDistance_RecursiveImplementation() { + assertEquals(result, EditDistanceRecursive.calculate(x, y)); + } + + @Test + public void testEditDistance_givenDynamicProgrammingImplementation() { + assertEquals(result, EditDistanceDynamicProgramming.calculate(x, y)); + } +} diff --git a/algorithms/src/test/java/com/baeldung/algorithms/linkedlist/CycleDetectionBruteForceUnitTest.java b/algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/linkedlist/CycleDetectionBruteForceUnitTest.java similarity index 96% rename from algorithms/src/test/java/com/baeldung/algorithms/linkedlist/CycleDetectionBruteForceUnitTest.java rename to algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/linkedlist/CycleDetectionBruteForceUnitTest.java index af2430ec55eb..33889fbec62a 100644 --- a/algorithms/src/test/java/com/baeldung/algorithms/linkedlist/CycleDetectionBruteForceUnitTest.java +++ b/algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/linkedlist/CycleDetectionBruteForceUnitTest.java @@ -1,23 +1,23 @@ -package com.baeldung.algorithms.linkedlist; - -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; - -@RunWith(value = Parameterized.class) -public class CycleDetectionBruteForceUnitTest extends CycleDetectionTestBase { - boolean cycleExists; - Node head; - - public CycleDetectionBruteForceUnitTest(Node head, boolean cycleExists) { - super(); - this.cycleExists = cycleExists; - this.head = head; - } - - @Test - public void givenList_detectLoop() { - Assert.assertEquals(cycleExists, CycleDetectionBruteForce.detectCycle(head).cycleExists); - } -} +package com.baeldung.algorithms.linkedlist; + +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(value = Parameterized.class) +public class CycleDetectionBruteForceUnitTest extends CycleDetectionTestBase { + boolean cycleExists; + Node head; + + public CycleDetectionBruteForceUnitTest(Node head, boolean cycleExists) { + super(); + this.cycleExists = cycleExists; + this.head = head; + } + + @Test + public void givenList_detectLoop() { + Assert.assertEquals(cycleExists, CycleDetectionBruteForce.detectCycle(head).cycleExists); + } +} diff --git a/algorithms/src/test/java/com/baeldung/algorithms/linkedlist/CycleDetectionByFastAndSlowIteratorsUnitTest.java b/algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/linkedlist/CycleDetectionByFastAndSlowIteratorsUnitTest.java similarity index 96% rename from algorithms/src/test/java/com/baeldung/algorithms/linkedlist/CycleDetectionByFastAndSlowIteratorsUnitTest.java rename to algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/linkedlist/CycleDetectionByFastAndSlowIteratorsUnitTest.java index ce31c8406718..149684077157 100644 --- a/algorithms/src/test/java/com/baeldung/algorithms/linkedlist/CycleDetectionByFastAndSlowIteratorsUnitTest.java +++ b/algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/linkedlist/CycleDetectionByFastAndSlowIteratorsUnitTest.java @@ -1,23 +1,23 @@ -package com.baeldung.algorithms.linkedlist; - -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; - -@RunWith(value = Parameterized.class) -public class CycleDetectionByFastAndSlowIteratorsUnitTest extends CycleDetectionTestBase { - boolean cycleExists; - Node head; - - public CycleDetectionByFastAndSlowIteratorsUnitTest(Node head, boolean cycleExists) { - super(); - this.cycleExists = cycleExists; - this.head = head; - } - - @Test - public void givenList_detectLoop() { - Assert.assertEquals(cycleExists, CycleDetectionByFastAndSlowIterators.detectCycle(head).cycleExists); - } -} +package com.baeldung.algorithms.linkedlist; + +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(value = Parameterized.class) +public class CycleDetectionByFastAndSlowIteratorsUnitTest extends CycleDetectionTestBase { + boolean cycleExists; + Node head; + + public CycleDetectionByFastAndSlowIteratorsUnitTest(Node head, boolean cycleExists) { + super(); + this.cycleExists = cycleExists; + this.head = head; + } + + @Test + public void givenList_detectLoop() { + Assert.assertEquals(cycleExists, CycleDetectionByFastAndSlowIterators.detectCycle(head).cycleExists); + } +} diff --git a/algorithms/src/test/java/com/baeldung/algorithms/linkedlist/CycleDetectionByHashingUnitTest.java b/algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/linkedlist/CycleDetectionByHashingUnitTest.java similarity index 96% rename from algorithms/src/test/java/com/baeldung/algorithms/linkedlist/CycleDetectionByHashingUnitTest.java rename to algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/linkedlist/CycleDetectionByHashingUnitTest.java index 4451c3d3c977..136f55f834ca 100644 --- a/algorithms/src/test/java/com/baeldung/algorithms/linkedlist/CycleDetectionByHashingUnitTest.java +++ b/algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/linkedlist/CycleDetectionByHashingUnitTest.java @@ -1,23 +1,23 @@ -package com.baeldung.algorithms.linkedlist; - -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; - -@RunWith(value = Parameterized.class) -public class CycleDetectionByHashingUnitTest extends CycleDetectionTestBase { - boolean cycleExists; - Node head; - - public CycleDetectionByHashingUnitTest(Node head, boolean cycleExists) { - super(); - this.cycleExists = cycleExists; - this.head = head; - } - - @Test - public void givenList_detectLoop() { - Assert.assertEquals(cycleExists, CycleDetectionByHashing.detectCycle(head).cycleExists); - } -} +package com.baeldung.algorithms.linkedlist; + +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(value = Parameterized.class) +public class CycleDetectionByHashingUnitTest extends CycleDetectionTestBase { + boolean cycleExists; + Node head; + + public CycleDetectionByHashingUnitTest(Node head, boolean cycleExists) { + super(); + this.cycleExists = cycleExists; + this.head = head; + } + + @Test + public void givenList_detectLoop() { + Assert.assertEquals(cycleExists, CycleDetectionByHashing.detectCycle(head).cycleExists); + } +} diff --git a/algorithms/src/test/java/com/baeldung/algorithms/linkedlist/CycleDetectionTestBase.java b/algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/linkedlist/CycleDetectionTestBase.java similarity index 96% rename from algorithms/src/test/java/com/baeldung/algorithms/linkedlist/CycleDetectionTestBase.java rename to algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/linkedlist/CycleDetectionTestBase.java index 51906de8e569..1c6f56b20dec 100644 --- a/algorithms/src/test/java/com/baeldung/algorithms/linkedlist/CycleDetectionTestBase.java +++ b/algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/linkedlist/CycleDetectionTestBase.java @@ -1,62 +1,62 @@ -package com.baeldung.algorithms.linkedlist; - -import java.util.Arrays; -import java.util.Collection; - -import org.junit.runners.Parameterized.Parameters; - -public class CycleDetectionTestBase { - - @Parameters - public static Collection getLists() { - return Arrays.asList(new Object[][] { - { createList(), false }, - { createListWithLoop(), true }, - { createListWithFullCycle(), true }, - { createListWithSingleNodeInCycle(), true } - }); - } - - public static Node createList() { - Node root = Node.createNewNode(10, null); - - for (int i = 9; i >= 1; --i) { - Node current = Node.createNewNode(i, root); - root = current; - } - - return root; - } - - public static Node createListWithLoop() { - Node node = createList(); - createLoop(node); - return node; - } - - public static Node createListWithFullCycle() { - Node head = createList(); - Node tail = Node.getTail(head); - tail.next = head; - return head; - } - - public static Node createListWithSingleNodeInCycle() { - Node head = createList(); - Node tail = Node.getTail(head); - tail.next = tail; - return head; - } - - public static void createLoop(Node root) { - Node tail = Node.getTail(root); - - Node middle = root; - for (int i = 1; i <= 4; i++) { - middle = middle.next; - } - - tail.next = middle; - } - -} +package com.baeldung.algorithms.linkedlist; + +import java.util.Arrays; +import java.util.Collection; + +import org.junit.runners.Parameterized.Parameters; + +public class CycleDetectionTestBase { + + @Parameters + public static Collection getLists() { + return Arrays.asList(new Object[][] { + { createList(), false }, + { createListWithLoop(), true }, + { createListWithFullCycle(), true }, + { createListWithSingleNodeInCycle(), true } + }); + } + + public static Node createList() { + Node root = Node.createNewNode(10, null); + + for (int i = 9; i >= 1; --i) { + Node current = Node.createNewNode(i, root); + root = current; + } + + return root; + } + + public static Node createListWithLoop() { + Node node = createList(); + createLoop(node); + return node; + } + + public static Node createListWithFullCycle() { + Node head = createList(); + Node tail = Node.getTail(head); + tail.next = head; + return head; + } + + public static Node createListWithSingleNodeInCycle() { + Node head = createList(); + Node tail = Node.getTail(head); + tail.next = tail; + return head; + } + + public static void createLoop(Node root) { + Node tail = Node.getTail(root); + + Node middle = root; + for (int i = 1; i <= 4; i++) { + middle = middle.next; + } + + tail.next = middle; + } + +} diff --git a/algorithms/src/test/java/com/baeldung/algorithms/linkedlist/CycleRemovalBruteForceUnitTest.java b/algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/linkedlist/CycleRemovalBruteForceUnitTest.java similarity index 97% rename from algorithms/src/test/java/com/baeldung/algorithms/linkedlist/CycleRemovalBruteForceUnitTest.java rename to algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/linkedlist/CycleRemovalBruteForceUnitTest.java index f69e3c35baef..36f08d2b763b 100644 --- a/algorithms/src/test/java/com/baeldung/algorithms/linkedlist/CycleRemovalBruteForceUnitTest.java +++ b/algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/linkedlist/CycleRemovalBruteForceUnitTest.java @@ -1,24 +1,24 @@ -package com.baeldung.algorithms.linkedlist; - -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; - -@RunWith(value = Parameterized.class) -public class CycleRemovalBruteForceUnitTest extends CycleDetectionTestBase { - boolean cycleExists; - Node head; - - public CycleRemovalBruteForceUnitTest(Node head, boolean cycleExists) { - super(); - this.cycleExists = cycleExists; - this.head = head; - } - - @Test - public void givenList_ifLoopExists_thenDetectAndRemoveLoop() { - Assert.assertEquals(cycleExists, CycleRemovalBruteForce.detectAndRemoveCycle(head)); - Assert.assertFalse(CycleDetectionByFastAndSlowIterators.detectCycle(head).cycleExists); - } -} +package com.baeldung.algorithms.linkedlist; + +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(value = Parameterized.class) +public class CycleRemovalBruteForceUnitTest extends CycleDetectionTestBase { + boolean cycleExists; + Node head; + + public CycleRemovalBruteForceUnitTest(Node head, boolean cycleExists) { + super(); + this.cycleExists = cycleExists; + this.head = head; + } + + @Test + public void givenList_ifLoopExists_thenDetectAndRemoveLoop() { + Assert.assertEquals(cycleExists, CycleRemovalBruteForce.detectAndRemoveCycle(head)); + Assert.assertFalse(CycleDetectionByFastAndSlowIterators.detectCycle(head).cycleExists); + } +} diff --git a/algorithms/src/test/java/com/baeldung/algorithms/linkedlist/CycleRemovalByCountingLoopNodesUnitTest.java b/algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/linkedlist/CycleRemovalByCountingLoopNodesUnitTest.java similarity index 97% rename from algorithms/src/test/java/com/baeldung/algorithms/linkedlist/CycleRemovalByCountingLoopNodesUnitTest.java rename to algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/linkedlist/CycleRemovalByCountingLoopNodesUnitTest.java index c17aa6eeab10..cc7589c53d7a 100644 --- a/algorithms/src/test/java/com/baeldung/algorithms/linkedlist/CycleRemovalByCountingLoopNodesUnitTest.java +++ b/algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/linkedlist/CycleRemovalByCountingLoopNodesUnitTest.java @@ -1,24 +1,24 @@ -package com.baeldung.algorithms.linkedlist; - -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; - -@RunWith(value = Parameterized.class) -public class CycleRemovalByCountingLoopNodesUnitTest extends CycleDetectionTestBase { - boolean cycleExists; - Node head; - - public CycleRemovalByCountingLoopNodesUnitTest(Node head, boolean cycleExists) { - super(); - this.cycleExists = cycleExists; - this.head = head; - } - - @Test - public void givenList_ifLoopExists_thenDetectAndRemoveLoop() { - Assert.assertEquals(cycleExists, CycleRemovalByCountingLoopNodes.detectAndRemoveCycle(head)); - Assert.assertFalse(CycleDetectionByFastAndSlowIterators.detectCycle(head).cycleExists); - } -} +package com.baeldung.algorithms.linkedlist; + +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(value = Parameterized.class) +public class CycleRemovalByCountingLoopNodesUnitTest extends CycleDetectionTestBase { + boolean cycleExists; + Node head; + + public CycleRemovalByCountingLoopNodesUnitTest(Node head, boolean cycleExists) { + super(); + this.cycleExists = cycleExists; + this.head = head; + } + + @Test + public void givenList_ifLoopExists_thenDetectAndRemoveLoop() { + Assert.assertEquals(cycleExists, CycleRemovalByCountingLoopNodes.detectAndRemoveCycle(head)); + Assert.assertFalse(CycleDetectionByFastAndSlowIterators.detectCycle(head).cycleExists); + } +} diff --git a/algorithms/src/test/java/com/baeldung/algorithms/linkedlist/CycleRemovalWithoutCountingLoopNodesUnitTest.java b/algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/linkedlist/CycleRemovalWithoutCountingLoopNodesUnitTest.java similarity index 97% rename from algorithms/src/test/java/com/baeldung/algorithms/linkedlist/CycleRemovalWithoutCountingLoopNodesUnitTest.java rename to algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/linkedlist/CycleRemovalWithoutCountingLoopNodesUnitTest.java index 06ff840a5992..350e63dcc3a9 100644 --- a/algorithms/src/test/java/com/baeldung/algorithms/linkedlist/CycleRemovalWithoutCountingLoopNodesUnitTest.java +++ b/algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/linkedlist/CycleRemovalWithoutCountingLoopNodesUnitTest.java @@ -1,24 +1,24 @@ -package com.baeldung.algorithms.linkedlist; - -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; - -@RunWith(value = Parameterized.class) -public class CycleRemovalWithoutCountingLoopNodesUnitTest extends CycleDetectionTestBase { - boolean cycleExists; - Node head; - - public CycleRemovalWithoutCountingLoopNodesUnitTest(Node head, boolean cycleExists) { - super(); - this.cycleExists = cycleExists; - this.head = head; - } - - @Test - public void givenList_ifLoopExists_thenDetectAndRemoveLoop() { - Assert.assertEquals(cycleExists, CycleRemovalWithoutCountingLoopNodes.detectAndRemoveCycle(head)); - Assert.assertFalse(CycleDetectionByFastAndSlowIterators.detectCycle(head).cycleExists); - } +package com.baeldung.algorithms.linkedlist; + +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(value = Parameterized.class) +public class CycleRemovalWithoutCountingLoopNodesUnitTest extends CycleDetectionTestBase { + boolean cycleExists; + Node head; + + public CycleRemovalWithoutCountingLoopNodesUnitTest(Node head, boolean cycleExists) { + super(); + this.cycleExists = cycleExists; + this.head = head; + } + + @Test + public void givenList_ifLoopExists_thenDetectAndRemoveLoop() { + Assert.assertEquals(cycleExists, CycleRemovalWithoutCountingLoopNodes.detectAndRemoveCycle(head)); + Assert.assertFalse(CycleDetectionByFastAndSlowIterators.detectCycle(head).cycleExists); + } } \ No newline at end of file diff --git a/algorithms/src/test/java/com/baeldung/algorithms/moneywords/NumberWordConverterUnitTest.java b/algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/moneywords/NumberWordConverterUnitTest.java similarity index 100% rename from algorithms/src/test/java/com/baeldung/algorithms/moneywords/NumberWordConverterUnitTest.java rename to algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/moneywords/NumberWordConverterUnitTest.java diff --git a/algorithms/src/test/java/com/baeldung/algorithms/rectanglesoverlap/RectangleUnitTest.java b/algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/rectanglesoverlap/RectangleUnitTest.java similarity index 100% rename from algorithms/src/test/java/com/baeldung/algorithms/rectanglesoverlap/RectangleUnitTest.java rename to algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/rectanglesoverlap/RectangleUnitTest.java diff --git a/algorithms/src/test/java/com/baeldung/algorithms/romannumerals/RomanArabicConverterUnitTest.java b/algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/romannumerals/RomanArabicConverterUnitTest.java similarity index 95% rename from algorithms/src/test/java/com/baeldung/algorithms/romannumerals/RomanArabicConverterUnitTest.java rename to algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/romannumerals/RomanArabicConverterUnitTest.java index b289ec6bc939..9043cfe9cc2a 100644 --- a/algorithms/src/test/java/com/baeldung/algorithms/romannumerals/RomanArabicConverterUnitTest.java +++ b/algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/romannumerals/RomanArabicConverterUnitTest.java @@ -1,29 +1,29 @@ -package com.baeldung.algorithms.romannumerals; - -import static org.assertj.core.api.Assertions.assertThat; - -import org.junit.Test; - -public class RomanArabicConverterUnitTest { - - @Test - public void given2018Roman_WhenConvertingToArabic_ThenReturn2018() { - - String roman2018 = "MMXVIII"; - - int result = RomanArabicConverter.romanToArabic(roman2018); - - assertThat(result).isEqualTo(2018); - } - - @Test - public void given1999Arabic_WhenConvertingToRoman_ThenReturnMCMXCIX() { - - int arabic1999 = 1999; - - String result = RomanArabicConverter.arabicToRoman(arabic1999); - - assertThat(result).isEqualTo("MCMXCIX"); - } - -} +package com.baeldung.algorithms.romannumerals; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.Test; + +public class RomanArabicConverterUnitTest { + + @Test + public void given2018Roman_WhenConvertingToArabic_ThenReturn2018() { + + String roman2018 = "MMXVIII"; + + int result = RomanArabicConverter.romanToArabic(roman2018); + + assertThat(result).isEqualTo(2018); + } + + @Test + public void given1999Arabic_WhenConvertingToRoman_ThenReturnMCMXCIX() { + + int arabic1999 = 1999; + + String result = RomanArabicConverter.arabicToRoman(arabic1999); + + assertThat(result).isEqualTo("MCMXCIX"); + } + +} diff --git a/algorithms/src/test/java/com/baeldung/jgrapht/CompleteGraphUnitTest.java b/algorithms-miscellaneous-2/src/test/java/com/baeldung/jgrapht/CompleteGraphUnitTest.java similarity index 100% rename from algorithms/src/test/java/com/baeldung/jgrapht/CompleteGraphUnitTest.java rename to algorithms-miscellaneous-2/src/test/java/com/baeldung/jgrapht/CompleteGraphUnitTest.java diff --git a/algorithms/src/test/java/com/baeldung/jgrapht/DirectedGraphUnitTest.java b/algorithms-miscellaneous-2/src/test/java/com/baeldung/jgrapht/DirectedGraphUnitTest.java similarity index 100% rename from algorithms/src/test/java/com/baeldung/jgrapht/DirectedGraphUnitTest.java rename to algorithms-miscellaneous-2/src/test/java/com/baeldung/jgrapht/DirectedGraphUnitTest.java diff --git a/algorithms/src/test/java/com/baeldung/jgrapht/EulerianCircuitUnitTest.java b/algorithms-miscellaneous-2/src/test/java/com/baeldung/jgrapht/EulerianCircuitUnitTest.java similarity index 100% rename from algorithms/src/test/java/com/baeldung/jgrapht/EulerianCircuitUnitTest.java rename to algorithms-miscellaneous-2/src/test/java/com/baeldung/jgrapht/EulerianCircuitUnitTest.java diff --git a/algorithms-sorting/.gitignore b/algorithms-sorting/.gitignore new file mode 100644 index 000000000000..30b2b7442c55 --- /dev/null +++ b/algorithms-sorting/.gitignore @@ -0,0 +1,4 @@ +/target/ +.settings/ +.classpath +.project \ No newline at end of file diff --git a/algorithms-sorting/README.md b/algorithms-sorting/README.md new file mode 100644 index 000000000000..f88b93e25e5d --- /dev/null +++ b/algorithms-sorting/README.md @@ -0,0 +1,7 @@ +## Relevant articles: + +- [Bubble Sort in Java](http://www.baeldung.com/java-bubble-sort) +- [Merge Sort in Java](https://www.baeldung.com/java-merge-sort) +- [Quicksort Algorithm Implementation in Java](https://www.baeldung.com/java-quicksort) +- [Insertion Sort in Java](https://www.baeldung.com/java-insertion-sort) + diff --git a/algorithms-sorting/pom.xml b/algorithms-sorting/pom.xml new file mode 100644 index 000000000000..d83598307814 --- /dev/null +++ b/algorithms-sorting/pom.xml @@ -0,0 +1,96 @@ + + 4.0.0 + com.baeldung + algorithms-sorting + 0.0.1-SNAPSHOT + + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + + + + + org.apache.commons + commons-math3 + ${commons-math3.version} + + + commons-codec + commons-codec + ${commons-codec.version} + + + org.projectlombok + lombok + ${lombok.version} + provided + + + io.jenetics + jenetics + ${io.jenetics.version} + + + org.jgrapht + jgrapht-core + ${org.jgrapht.core.version} + + + pl.allegro.finance + tradukisto + ${tradukisto.version} + + + org.assertj + assertj-core + ${org.assertj.core.version} + test + + + + + + + + org.codehaus.mojo + exec-maven-plugin + ${exec-maven-plugin.version} + + + + + + + + + org.codehaus.mojo + cobertura-maven-plugin + 2.7 + + + + com/baeldung/algorithms/dijkstra/* + + + com/baeldung/algorithms/dijkstra/* + + + + + + + + + 1.16.12 + 3.6.1 + 1.0.1 + 3.7.0 + 1.0.1 + 3.9.0 + 1.11 + + + \ No newline at end of file diff --git a/algorithms-sorting/roundUpToHundred/.gitignore b/algorithms-sorting/roundUpToHundred/.gitignore new file mode 100644 index 000000000000..ae3c1726048c --- /dev/null +++ b/algorithms-sorting/roundUpToHundred/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/algorithms-sorting/roundUpToHundred/src/com/java/src/RoundUpToHundred.java b/algorithms-sorting/roundUpToHundred/src/com/java/src/RoundUpToHundred.java new file mode 100644 index 000000000000..6c02a340d37f --- /dev/null +++ b/algorithms-sorting/roundUpToHundred/src/com/java/src/RoundUpToHundred.java @@ -0,0 +1,20 @@ +package com.java.src; + +import java.util.Scanner; + +public class RoundUpToHundred { + + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + double input = scanner.nextDouble(); + scanner.close(); + + RoundUpToHundred.round(input); + } + + static long round(double input) { + long i = (long) Math.ceil(input); + return ((i + 99) / 100) * 100; + }; + +} diff --git a/algorithms-sorting/roundUpToHundred/src/com/java/src/RoundUpToHundredTest.java b/algorithms-sorting/roundUpToHundred/src/com/java/src/RoundUpToHundredTest.java new file mode 100644 index 000000000000..cb541ad49c43 --- /dev/null +++ b/algorithms-sorting/roundUpToHundred/src/com/java/src/RoundUpToHundredTest.java @@ -0,0 +1,14 @@ +package com.java.src; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +public class RoundUpToHundredTest { + @Test + public void givenInput_whenRound_thenRoundUpToTheNearestHundred() { + assertEquals("Rounded up to hundred", 100, RoundUpToHundred.round(99)); + assertEquals("Rounded up to three hundred ", 300, RoundUpToHundred.round(200.2)); + assertEquals("Returns same rounded value", 400, RoundUpToHundred.round(400)); + } +} diff --git a/algorithms/src/main/java/com/baeldung/algorithms/bubblesort/BubbleSort.java b/algorithms-sorting/src/main/java/com/baeldung/algorithms/bubblesort/BubbleSort.java similarity index 96% rename from algorithms/src/main/java/com/baeldung/algorithms/bubblesort/BubbleSort.java rename to algorithms-sorting/src/main/java/com/baeldung/algorithms/bubblesort/BubbleSort.java index 275cb7f3a239..25280326762e 100644 --- a/algorithms/src/main/java/com/baeldung/algorithms/bubblesort/BubbleSort.java +++ b/algorithms-sorting/src/main/java/com/baeldung/algorithms/bubblesort/BubbleSort.java @@ -1,40 +1,40 @@ -package com.baeldung.algorithms.bubblesort; - -import java.util.stream.IntStream; - -public class BubbleSort { - - void bubbleSort(Integer[] arr) { - int n = arr.length; - IntStream.range(0, n - 1) - .flatMap(i -> IntStream.range(1, n - i)) - .forEach(j -> { - if (arr[j - 1] > arr[j]) { - int temp = arr[j]; - arr[j] = arr[j - 1]; - arr[j - 1] = temp; - } - }); - } - - void optimizedBubbleSort(Integer[] arr) { - int i = 0, n = arr.length; - - boolean swapNeeded = true; - while (i < n - 1 && swapNeeded) { - swapNeeded = false; - for (int j = 1; j < n - i; j++) { - if (arr[j - 1] > arr[j]) { - - int temp = arr[j - 1]; - arr[j - 1] = arr[j]; - arr[j] = temp; - swapNeeded = true; - } - } - if (!swapNeeded) - break; - i++; - } - } -} +package com.baeldung.algorithms.bubblesort; + +import java.util.stream.IntStream; + +public class BubbleSort { + + void bubbleSort(Integer[] arr) { + int n = arr.length; + IntStream.range(0, n - 1) + .flatMap(i -> IntStream.range(1, n - i)) + .forEach(j -> { + if (arr[j - 1] > arr[j]) { + int temp = arr[j]; + arr[j] = arr[j - 1]; + arr[j - 1] = temp; + } + }); + } + + void optimizedBubbleSort(Integer[] arr) { + int i = 0, n = arr.length; + + boolean swapNeeded = true; + while (i < n - 1 && swapNeeded) { + swapNeeded = false; + for (int j = 1; j < n - i; j++) { + if (arr[j - 1] > arr[j]) { + + int temp = arr[j - 1]; + arr[j - 1] = arr[j]; + arr[j] = temp; + swapNeeded = true; + } + } + if (!swapNeeded) + break; + i++; + } + } +} diff --git a/algorithms/src/main/java/com/baeldung/algorithms/heapsort/Heap.java b/algorithms-sorting/src/main/java/com/baeldung/algorithms/heapsort/Heap.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/heapsort/Heap.java rename to algorithms-sorting/src/main/java/com/baeldung/algorithms/heapsort/Heap.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/insertionsort/InsertionSort.java b/algorithms-sorting/src/main/java/com/baeldung/algorithms/insertionsort/InsertionSort.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/insertionsort/InsertionSort.java rename to algorithms-sorting/src/main/java/com/baeldung/algorithms/insertionsort/InsertionSort.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/mergesort/MergeSort.java b/algorithms-sorting/src/main/java/com/baeldung/algorithms/mergesort/MergeSort.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/mergesort/MergeSort.java rename to algorithms-sorting/src/main/java/com/baeldung/algorithms/mergesort/MergeSort.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/quicksort/QuickSort.java b/algorithms-sorting/src/main/java/com/baeldung/algorithms/quicksort/QuickSort.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/quicksort/QuickSort.java rename to algorithms-sorting/src/main/java/com/baeldung/algorithms/quicksort/QuickSort.java diff --git a/algorithms/src/main/java/com/baeldung/algorithms/quicksort/ThreeWayQuickSort.java b/algorithms-sorting/src/main/java/com/baeldung/algorithms/quicksort/ThreeWayQuickSort.java similarity index 100% rename from algorithms/src/main/java/com/baeldung/algorithms/quicksort/ThreeWayQuickSort.java rename to algorithms-sorting/src/main/java/com/baeldung/algorithms/quicksort/ThreeWayQuickSort.java diff --git a/algorithms-sorting/src/main/resources/logback.xml b/algorithms-sorting/src/main/resources/logback.xml new file mode 100644 index 000000000000..7d900d8ea884 --- /dev/null +++ b/algorithms-sorting/src/main/resources/logback.xml @@ -0,0 +1,13 @@ + + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + \ No newline at end of file diff --git a/algorithms/src/test/java/com/baeldung/algorithms/bubblesort/BubbleSortUnitTest.java b/algorithms-sorting/src/test/java/com/baeldung/algorithms/bubblesort/BubbleSortUnitTest.java similarity index 97% rename from algorithms/src/test/java/com/baeldung/algorithms/bubblesort/BubbleSortUnitTest.java rename to algorithms-sorting/src/test/java/com/baeldung/algorithms/bubblesort/BubbleSortUnitTest.java index c3260a18dde5..210ee2378a63 100644 --- a/algorithms/src/test/java/com/baeldung/algorithms/bubblesort/BubbleSortUnitTest.java +++ b/algorithms-sorting/src/test/java/com/baeldung/algorithms/bubblesort/BubbleSortUnitTest.java @@ -1,26 +1,26 @@ -package com.baeldung.algorithms.bubblesort; - -import static org.junit.jupiter.api.Assertions.assertArrayEquals; - -import org.junit.jupiter.api.Test; - -public class BubbleSortUnitTest { - - @Test - public void givenIntegerArray_whenSortedWithBubbleSort_thenGetSortedArray() { - Integer[] array = { 2, 1, 4, 6, 3, 5 }; - Integer[] sortedArray = { 1, 2, 3, 4, 5, 6 }; - BubbleSort bubbleSort = new BubbleSort(); - bubbleSort.bubbleSort(array); - assertArrayEquals(array, sortedArray); - } - - @Test - public void givenIntegerArray_whenSortedWithOptimizedBubbleSort_thenGetSortedArray() { - Integer[] array = { 2, 1, 4, 6, 3, 5 }; - Integer[] sortedArray = { 1, 2, 3, 4, 5, 6 }; - BubbleSort bubbleSort = new BubbleSort(); - bubbleSort.optimizedBubbleSort(array); - assertArrayEquals(array, sortedArray); - } +package com.baeldung.algorithms.bubblesort; + +import static org.junit.jupiter.api.Assertions.assertArrayEquals; + +import org.junit.jupiter.api.Test; + +public class BubbleSortUnitTest { + + @Test + public void givenIntegerArray_whenSortedWithBubbleSort_thenGetSortedArray() { + Integer[] array = { 2, 1, 4, 6, 3, 5 }; + Integer[] sortedArray = { 1, 2, 3, 4, 5, 6 }; + BubbleSort bubbleSort = new BubbleSort(); + bubbleSort.bubbleSort(array); + assertArrayEquals(array, sortedArray); + } + + @Test + public void givenIntegerArray_whenSortedWithOptimizedBubbleSort_thenGetSortedArray() { + Integer[] array = { 2, 1, 4, 6, 3, 5 }; + Integer[] sortedArray = { 1, 2, 3, 4, 5, 6 }; + BubbleSort bubbleSort = new BubbleSort(); + bubbleSort.optimizedBubbleSort(array); + assertArrayEquals(array, sortedArray); + } } \ No newline at end of file diff --git a/algorithms/src/test/java/com/baeldung/algorithms/heapsort/HeapUnitTest.java b/algorithms-sorting/src/test/java/com/baeldung/algorithms/heapsort/HeapUnitTest.java similarity index 100% rename from algorithms/src/test/java/com/baeldung/algorithms/heapsort/HeapUnitTest.java rename to algorithms-sorting/src/test/java/com/baeldung/algorithms/heapsort/HeapUnitTest.java diff --git a/algorithms/src/test/java/com/baeldung/algorithms/insertionsort/InsertionSortUnitTest.java b/algorithms-sorting/src/test/java/com/baeldung/algorithms/insertionsort/InsertionSortUnitTest.java similarity index 100% rename from algorithms/src/test/java/com/baeldung/algorithms/insertionsort/InsertionSortUnitTest.java rename to algorithms-sorting/src/test/java/com/baeldung/algorithms/insertionsort/InsertionSortUnitTest.java diff --git a/algorithms/src/test/java/com/baeldung/algorithms/mergesort/MergeSortUnitTest.java b/algorithms-sorting/src/test/java/com/baeldung/algorithms/mergesort/MergeSortUnitTest.java similarity index 100% rename from algorithms/src/test/java/com/baeldung/algorithms/mergesort/MergeSortUnitTest.java rename to algorithms-sorting/src/test/java/com/baeldung/algorithms/mergesort/MergeSortUnitTest.java diff --git a/algorithms/src/test/java/com/baeldung/algorithms/quicksort/QuickSortUnitTest.java b/algorithms-sorting/src/test/java/com/baeldung/algorithms/quicksort/QuickSortUnitTest.java similarity index 100% rename from algorithms/src/test/java/com/baeldung/algorithms/quicksort/QuickSortUnitTest.java rename to algorithms-sorting/src/test/java/com/baeldung/algorithms/quicksort/QuickSortUnitTest.java diff --git a/algorithms/src/test/java/com/baeldung/algorithms/quicksort/ThreeWayQuickSortUnitTest.java b/algorithms-sorting/src/test/java/com/baeldung/algorithms/quicksort/ThreeWayQuickSortUnitTest.java similarity index 100% rename from algorithms/src/test/java/com/baeldung/algorithms/quicksort/ThreeWayQuickSortUnitTest.java rename to algorithms-sorting/src/test/java/com/baeldung/algorithms/quicksort/ThreeWayQuickSortUnitTest.java diff --git a/algorithms/.gitignore b/algorithms/.gitignore deleted file mode 100644 index b83d22266ac8..000000000000 --- a/algorithms/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/target/ diff --git a/pom.xml b/pom.xml index 0b5cd16ea041..a546f8e92555 100644 --- a/pom.xml +++ b/pom.xml @@ -334,7 +334,10 @@ aws aws-lambda akka-streams - algorithms + algorithms-genetic + algorithms-miscellaneous-1 + algorithms-miscellaneous-2 + algorithms-sorting annotations apache-cxf apache-fop @@ -1255,7 +1258,10 @@ aws aws-lambda akka-streams - algorithms + algorithms-genetic + algorithms-miscellaneous-1 + algorithms-miscellaneous-2 + algorithms-sorting annotations apache-cxf apache-fop